社区
C++ 语言
帖子详情
操作符不是有标准的优先级顺序吗?怎么还会出现表达式副作用的情况?
ultron000
2018-03-10 09:48:20
C++有18个级别的优先级顺序,遇到具体的问题的时候严格按照这个顺序来运算就行了啊,为什么还会有那么多的表达式副作用?
...全文
315
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的值放到另一个寄存器,最后执行两者相加 两种做法都符合标准的…… 但实现上就是不一样。。。。 请楼主先放空头脑,不带成见地再读两遍你贴出来的教材试试?
你必须知道的495个C语言问题
就算括号不行,
操作符
优先级
是否能够控制计算
顺序
呢? 3.6 可是&&和||
操作符
呢?我看到过类似while((c=getchar())!=EOF&&c!='\n')的代码…… 3.7 是否可以安全地认为,一旦&&和||左边的
表达式
已经决定了整个...
尹成Python27天入门到项目实战
业day19up 深度遍历与广度遍历正则
表达式
小结最简单递归递归
顺序
递归求和递归腾讯台阶面试题文件夹的函数遍历文件夹遍历文件夹有层次感栈模拟递归栈模拟递归遍历文件夹栈模拟递归遍历文件夹层次感普及网站提取概念栈...
关于C语言中
表达式
运算
顺序
(
优先级
、结合性、
副作用
、序列点)的讨论以及c语言未定义行为
关于C语言中
表达式
运算
顺序
(
优先级
、结合性、
副作用
、序列点)的讨论以及c语言未定义行为
表达式
运算
顺序
与求值
顺序
,
副作用
操作符
(++,--),序列点
操作符
(运算符)的
优先级
和结合性并不决定
表达式
的求值
顺序
,只是用于进行语法分析,决定语法树的生成。3 + 4 * 5,可以解析成(3 + 4) * 5 或者 3 + (4 * 5),因为乘法
优先级
高于加法,所以会选择第二种解析方法。3...
C++ 语言
64,639
社区成员
250,578
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章