有人可以向我解释为什么这段代码会打印 14 吗?我只是被另一个学生问到了,我想不通。
int i = 5;
i = ++i + ++i;
cout<<i;
最佳答案
副作用的顺序在 C++ 中未定义。此外,在单个表达式中修改变量两次没有定义的行为(参见 C++ standard,§5.0.4,物理页 87/逻辑页 73)。
解决办法:不要在复杂的表达式中使用副作用,在简单的表达式中不要使用多个。并且启用编译器可以给你的所有警告并没有什么坏处:将 -Wall
(gcc) 或 /Wall/W4
(Visual C++) 添加到命令行产生一个合适的警告:
test-so-side-effects.c: In function 'main':
test-so-side-effects.c:5: warning: operation on 'i' may be undefined
test-so-side-effects.c:5: warning: operation on 'i' may be undefined
显然,代码编译为:
i = i + 1;
i = i + 1;
i = i + i;
关于c++ - 我 =++i+++i;在 C++ 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/340282/