社区
C语言
帖子详情
请教一个关于左值的问题
winsunII
2003-09-29 04:57:51
int* q = &(x++); //为什么说x++不是一个左值,它不是存储在x里的吗?
...全文
45
13
打赏
收藏
请教一个关于左值的问题
int* q = &(x++); //为什么说x++不是一个左值,它不是存储在x里的吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Jinhao
2003-09-29
打赏
举报
回复
int main()
{
int x=10;
int* q =&(++x);
}
用Dev-C++顺利通过编译
winsunII
2003-09-29
打赏
举报
回复
看来我的找个gcc编译一下
TianGuangZao
2003-09-29
打赏
举报
回复
不行。
++i 是左值没错,不过通不过也没办法。
winsunII
2003-09-29
打赏
举报
回复
To: TianGuangZao(天光早)
int *q=&(++x);和int *q=&(x++); 在VC下可通过,在gcc下通不过吗?
winsunII
2003-09-29
打赏
举报
回复
谢谢 Jinhao(辣子鸡丁) ,让人豁然开朗 :)
TianGuangZao
2003-09-29
打赏
举报
回复
不管是 int *q=&(++x); 还是 int *q=&(x++);
gcc 下都通不过,同一个提示:
error: invalid lvalue in unary `&'
x 是什么都没告诉,如果 x 是 int 类型
int x;
int* q = &x;
x++;
不就可以了吗?
Jinhao
2003-09-29
打赏
举报
回复
也许你们不懂的在这里“x++返回一个临时对象”
x++可以看承下面的函数
int addself1(int &x)
{ int a=x;
x=x+1;
return a;
}
所以你用&取回的x++地址其实是那个临时对象的地址,但是临时对象在函数结束时就被销毁了,故这样取得的地址是无意义的
++i 可看先下面的函数
int& addself2(int& x)
{ x=x+1;
return x;
}
这样,函数返回的就是x本身自己,所以你用&取得的地址就是一个有效的地址
RainWindy
2003-09-29
打赏
举报
回复
我也不懂,但可以这样
x++;
int *q = &x;
这样看起来又没有歧义,多好。
Jinhao
2003-09-29
打赏
举报
回复
x++返回一个临时对象
操作符&,去获取这个临时对象的地址
所以不允许
临时对象就是左值
可以改成这样
int *q=&(++x);
aflyinghorse
2003-09-29
打赏
举报
回复
x++不是一个左值
++x才是一个左值
x++x相当于这样:(tmp = x, ++x, tmp)
sky8144843
2003-09-29
打赏
举报
回复
up
winsunII
2003-09-29
打赏
举报
回复
我编译这条语句,编译器报错,error C2102: '&' requires l-value
但int* q = &++x;是正确的,为什么?
tonyzhengjq
2003-09-29
打赏
举报
回复
没听懂你的意思!
C++系列第2:C++2.0(11+14+17+20)详解及多线程实战
学习并掌握C++2.0(11+14+17+20)的新特性,学习线程及线程池的应用 ---------------------------------------------------给小白学员的3年学习路径及计划技术方面分三块:1.纯开发技术方向2.音视频流媒体专业方向3.项目实战---------------------------------------------------1.纯开发技术方向(1) C++必须要过硬(至少学会10本经典好书)(2) 系统级编程(Windows、Linux),必须特别熟练系统API,灵活运用(3) 框架与工具(Qt、MFC):必须精通其中一种。(4) 架构与设计模式:需要提升
一个
高度,不再是简单的编码,而是思维模式。(5) 驱动级别(如果有兴趣,可以深入到驱动级:包括Windows、Linux)(6) 最好学习点Java+Html+javascript等WEB技术。2.音视频流媒体专业方向(1) 音视频流媒体基础理论: 必须认真学会,否则看代码就是看天书(2) 编解码方向:精通h.264,h.265(hevc), 包括理论和各个开源库(ffmpeg,libx264,libx265,...)。(3) 直播方向: 精通各种直播协议(rtsp,rtmp,hls,http-flv,...), 钻研各个开源库(live555,darwin,srs,zlmediakit,crtmpserver,...)(4) 视频监控: 理论+开源库(onvif+281818)(EasyMonitor、iSpy、ZoneMinder(web)、...) 3.项目实战(1) Qt项目: 至少要亲手练习10个实战项目(网络服务器、多线程、数据库、图像处理、多人聊天、等等)(2)音视频项目:包括编解码、视频监控、直播等各个方向,都需要亲手实战项目,包括视频服务器、后台管理系统、前端播放器(多端)--------------------------------------------------- 第1章 C++11新特性 41). nullptr关键字与新语法 42). auto和decltype类型推导 6 auto讲解 6 auto示例 7 decltype 83). for区间迭代 94). 初始化列表 105). 模板增强 11外部模板 11类型别名模板 12默认模板参数 126). 构造函数 13委托构造 13继承构造 147). Lambda 表达式 158). 新增容器 20std::array 20std::forward_list 21无序容器 22元组 std::tuple 239). 正则表达式 2610). 语言级线程支持 28多线程库简介 2811). 右值引用和move语义 31右值引用和move语义 32转移
左值
3412). constexpr 35第2章 C++14新特性 36Lambda 函数 36类型推导 37返回值类型推导(Return type deduction) 37泛型lambda 39[[弃用的]] [[deprecated]]属性 40二进制数字和数字分隔符 41第3章 C++17新特性 42安装GCC10.2 42安装msys2-x86_64-20200720 42更新镜像 42更新软件库 43安装 MinGW64 等必要的软件 43环境变量Path 43编译命令 43constexpr 44typename 45折叠表达式 47结构化绑定 48条件分支语句初始化 49聚合初始化 50嵌套命名空间 52lambda表达式捕获*this的值 53改写/继承构造函数 54用auto作为非类型模板参数 55__has_include 56fallthrough 57nodiscard 57maybe_unused 58第4章 C++20新特性 59编译命令 59concept 59typename 60explicit 61constinit 62位域变量的默认成员初始化 62指定初始化 63基于范围的for循环初始化 64放宽基于范围的for循环,新增自定义范围方法 65嵌套内联命名空间 66允许用圆括弧的值进行聚合初始化 67unicode字符串字面量 68允许转换成未知边界的数组 68likely和unlikely 69第5章 C++2.0(11/14/17/20)总结与分析 705.1 C语言与C++ 715.2 语言可用性的强化 725.2.1 常量 725.2.2 变量及其初始化 735.2.3 类型推导 745.2.4 控制流 765.2.5 模板 775.2.6 面向对象 815.3 语言运行期的强化 835.3.1 Lambda 表达式 835.3.2 右值引用 865.4 容器 885.4.1 线性容器 885.4.2 无序容器 895.4.3 元组 895.5 智能指针与内存管理 905.5.1 RAII 与引用计数 905.5.2 std::shared_ptr 905.5.3 std::unique_ptr 915.5.4 std::weak_ptr 91第6章 C++2.0多线程原理与实战 93什么是并发 93并发的方式 93为什么使用并发 95线程简介 96创建线程的三种方式 971. 通过函数 972.通过类对象创建线程 993.通过lambda表达式创建线程 101thread线程的使用 101互斥量与临界区 105期物Future 111条件变量 112原子操作 114内存模型 118第7章 C++2.0线程池原理与实战 120线程与线程池的基本原理 1201)、线程 1202)、线程的生命周期 1213)、什么是单线程和多线程 1214)、线程池 1225)、四种常见的线程池 123线程池的架构与流程 123线程池代码实战 125
C/C++
左值
性精髓(三)
左值
转换 zz from CSDN supermegaboy
C/C++
左值
性精髓 (三)
左值
转换
左值
转换又称为从
左值
到右值的转换。
左值
转换的发生一般基于两个原因: 第一:某些运算符仅要求右值操作数,例如+、-双目运算符,如果给予它们
一个
左值
操作数,这时候就需要把
左值
转换为右值; 第二:某些指示符,例如数组和函数,由于不属于标量类型,即所代表的实体本身不能被视为数值,这些指示符欲参与表达式计算,就必须将其数
[置顶] C/C++
左值
性精髓(三)
左值
转换----从函数到指针的转换
[置顶] C/C++
左值
性精髓(三)
左值
转换----从函数到指针的转换 分类: C/C++
左值
性精髓2011-12-03 22:46 2514人阅读 评论(14) 收藏 举报 functionstructemailc C/C++
左值
性精髓 (三)
左值
转换 3.从函数到指针的转换 将函数转换为指针的目的,与数组到指针的转换一样,都是为了将
关于所谓的
左值
和右值,完全是翻译错误啊!
L-value中的L指的是Location,表示可寻址。The "l" in lvalue can be though of as location R-value中的R指的是Read,表示可读。The "r" in rvalue can be thought of as "read" value.
C/C++
左值
性精髓(三)
左值
转换----从函数到指针的转换
2019独角兽企业重金招聘Python工程师标准>>> ...
C语言
69,365
社区成员
243,083
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章