社区
C++ 语言
帖子详情
操作符不是有标准的优先级顺序吗?怎么还会出现表达式副作用的情况?
ultron000
2018-03-10 09:48:20
C++有18个级别的优先级顺序,遇到具体的问题的时候严格按照这个顺序来运算就行了啊,为什么还会有那么多的表达式副作用?
...全文
344
4
打赏
收藏
操作符不是有标准的优先级顺序吗?怎么还会出现表达式副作用的情况?
C++有18个级别的优先级顺序,遇到具体的问题的时候严格按照这个顺序来运算就行了啊,为什么还会有那么多的表达式副作用?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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语言中用于
顺序
执行多个
表达式
的
操作符
。在逗号
表达式
中,如a=3, ...
序列点在C语言
表达式
求值中的作用
在教学中,引入序列点的概念可以帮助学生深入理解C语言的
表达式
求值规则,避免因混淆
操作符
优先级
和序列点而导致的错误。掌握序列点对于解决复杂
表达式
、编写高效代码以及调试程序都至关重要。在编写涉及
副作用
的...
c语言
表达式
4. **
副作用
和
顺序
**:
表达式
可能包含
副作用
,比如自增自减操作。对于这类
表达式
,C语言
标准
并不保证操作的
顺序
,因此`i++ + i++`的结果可能因编译器而异,这是程序员需要注意的地方。 5. **短路逻辑**:在逻辑...
C/C++ 语言中
表达式
的求值
根据
顺序
点的概念,在赋值
操作符
`=`执行之前,`b++`的
副作用
必须被实现,也就是说`b`的值必须被加1。因此,这个
表达式
最终会将`b`的原始值赋给`a`,然后`b`的值增加1。 #### 六、案例分析 为了进一步说明
顺序
点的...
表达式
的计算
3. **
操作符
优先级
与结合性** 在
表达式
计算中,
操作符
的
优先级
和结合性至关重要。
优先级
决定哪个运算先进行,结合性则确定具有相同
优先级
的
操作符
如何组合。例如,乘法比加法有更高的
优先级
,`2 + 3 * 4` 先计算 `3...
C++ 语言
65,189
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章