社区
C++ 语言
帖子详情
操作符不是有标准的优先级顺序吗?怎么还会出现表达式副作用的情况?
ultron000
2018-03-10 09:48:20
C++有18个级别的优先级顺序,遇到具体的问题的时候严格按照这个顺序来运算就行了啊,为什么还会有那么多的表达式副作用?
...全文
351
4
打赏
收藏
操作符不是有标准的优先级顺序吗?怎么还会出现表达式副作用的情况?
C++有18个级别的优先级顺序,遇到具体的问题的时候严格按照这个顺序来运算就行了啊,为什么还会有那么多的表达式副作用?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zilaishuichina
2018-03-12
打赏
举报
回复
传统意义上讲,表达式的作用应该单纯的就是进行计算的,一个表达式,除了产生一个计算结果,不应该改变参与计算的任何变量的值,或者产生其它的效果,这才是一个没有副作用的表达式。 C++中的运算符分两种:无副作用的运算符和有副作用的运算符。有副作用的运算符包括: 赋值(=),复合赋值(+=,*=,/=,等等这种),前增1,前减1,后增1,后减1,如果一个表达式中使用了具有副作用的运算符, 该表达式就是有副作用的表达式。 跟运算符优先级无关。 举个更直观的例子 int a = 1; int b = a++ - a; 按照运算符优先级的规定,++ 大于 -,且-的结合方向是从左往右, 理论上: 第一步,算减号左边的 a++ 第二步,算减号右边的 a 第三步,算 (第一步的运算结果) - (第二步的运算结果) 既不违反运算符优先级,也不违反运算符结合顺序 现在请你告诉我, 第一步的a++,这个后增1,a变成2,到底应该在第一步结束就变成2,还是在第二步结束变成2,还是在第三步结束变成2
赵4老师
2018-03-12
打赏
举报
回复
关于C,C++表达式求值顺序
http://blog.csdn.net/fefe82/article/details/37833767
,
http://bbs.csdn.net/topics/370153775
suuare
2018-03-11
打赏
举报
回复
所谓“先加后用”,c语言没有规定这个"先"到什么时候,同理“先用后加”这个“先”也有同样的问题。故各编译器设计者就按照自己的理解做了。
晨星
2018-03-10
打赏
举报
回复
同意楼上。 而且优先级(包括结合性)跟求值次序并不是一回事。 优先级和结全性决定表达式的静态结构,也就是编译器如何理解这个表达式;而求值次序依赖于编译器理解这个表达式之后所生成的实际代码,在不违反优先级和结合性的前提下,编译器仍有一定的发挥空间。
mstlq
2018-03-10
打赏
举报
回复
别的不提,就拿a+b举例,这里只有一个运算符,没有操作符优先级问题了吧? 实际上编译器会怎么干呢? 1.先把a的值放寄存器,再把b的值放到另一个寄存器,最后执行两者相加 2.先把b的值放寄存器,再把a的值放到另一个寄存器,最后执行两者相加 两种做法都符合标准的…… 但实现上就是不一样。。。。 请楼主先放空头脑,不带成见地再读两遍你贴出来的教材试试?
序列点在C语言
表达式
求值中的作用.pdf
序列点在C语言
表达式
求值中的作用.pdf
序列点在C语言
表达式
求值中的作用
本文开创性地分析了序列点在C语言
表达式
求值中的作用:序列点左边的操作数要先于其右边的操作数求值。讨论了逗号
操作符
,、逻辑与
操作符
&&、逻辑或
操作符
||和条件
操作符
?:的问号处需要序列点的原因。举例分析了序列点在
表达式
求值中的作用。
C/C++ 语言中
表达式
的求值
C/C++ 语言中
表达式
的求值 C/C++ 语言中
表达式
的求值 C/C++ 语言中
表达式
的求值 C/C++ 语言中
表达式
的求值 C/C++ 语言中
表达式
的求值 C/C++ 语言中
表达式
的求值
表达式
的计算
表达式
的计算
包括计算式的解析与执行
The Annotated C++ Reference Manual(ARM)-Ch05
首先真心感谢slimzhao的资源共享,他对经典C++书籍ARM的扫描确实很全面!我在阅读过程中把它这一资源分解成每个章节一个PDF,同时把其中的缺页和错页全部调整正确!如果是需要全本书一个PDF,烦请各位下载slimzhao的资源!本PDF是ARM的第五章!
C++ 语言
65,206
社区成员
250,519
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章