```c++
2*a+++++a*4
请问这里面是先运行a++呢还是先运行++a呢,为什么呢
```
```c++
2*a+++++a*4
请问这里面是先运行a++呢还是先运行++a呢,为什么呢
```
表达式可以看成(2i++)+ (++i4),接下来就是判断先运行左边还是右边,下面引用这篇文章
https://blog.csdn.net/weixin_40539125/article/details/93793670
到这里,我们已经知道了表达式的两个行为特征了,如下:
复合表达式是会考虑优先级和结合律的。
运算对象的求值顺序与优先级、结合律没有关系。
大多数运算符都没有规定表达式中运算对象的求值顺序,对于互不影响的函数之间,这并没有什么问题,但如果这几个函数共同影响同一个全局变量就会出现问题。
因此在C++ Primer第五版的123页中才会有这么一说:
“因为表达式的行为不可预知,因此不论编辑器生成什么样的代码程序都是错误的。”
是的,因为求值顺序没有规定,怎么样都有可能,这样的代码即使语法毫无问题,他也是错误的!
所以有两条经验准则用于书写复合表达式:
拿不准的时候最好用括号来强制让表达式的组合关系符合程序逻辑的要求。
如果改变了某个运算对象的值,在表达式的其他地方不要再使用这个运算对象