我的问题灵感来自下面的代码
int a=4;
int d=(++a) + (++a); // stored value 12
a=4;
int e=++a + a++; //Actual stored value 11
a=4;
int f=a++ + a++; //Actual stored value 9
a=4;
int g=a++ + ++a; //Actual stored value 10
我已经看到后缀运算符的优先级不仅仅是前缀运算符。 因此
'd' in my opinion should be (5+6)
'e' in my opinion should be (6+4)
'f' in my opinion should be (4+5)
'g' in my opinion should be (4+6)
我正在使用 gcc 7.4.0
任何人都可以帮助如何推理不匹配的结果吗?
注意:存储表达式 (d,e,f,g( 的变量与表达式 (a( 中涉及的变量不同。
根据 C 语言标准,您使用"未定义的行为"作为括号中项目的评估操作顺序不保证。因此,int d=(++a) + (++a);
的代码可以先执行两个增量,先进行a==6
,然后再进行求和,从而产生d==12
。
这就是为什么您不应该使用此类代码结构,并且它们只出现在学校作业中的原因。