我不明白为什么以下程序的输出是63
:
#include <iostream>
int main() {
int a = 20;
a += a + ++a;
std::cout << a;
}
我原以为61
。究竟a += a + ++a;
究竟是什么?
答案 0 :(得分:3)
标准说:“在上一个和下一个序列点之间,标量对象的表达式”( 5表达式, 5表达式,最多只能修改一次存储值) §4 ),即以下内容:
a += a + ++a
产生 未定义的行为 ,就像:
a = ++a;
已经。它还说:“只能访问先前的值以确定要存储的值”,即如果要更改a
,则可以使用a
同一表达式只是为了检索以前的值:
a = a + 1; // OK
... “否则行为未定义。”
答案 1 :(得分:1)
您正在触发未定义的行为,并且没有“正确”的答案。您的编译器可以选择以什么顺序来评估加号运算符的参数。
答案 2 :(得分:0)
看起来++a
正在表达式的其余部分之前进行评估,所以就好像{/ 1}}在
a
无论如何,不要在算术表达式中使用a += a + a;
。这对人们来说很困惑,可能是未定义的行为