有人能给我解释一下为什么这个代码打印14吗?我刚被另一个学生问了,但我想不出答案。
int i = 5;
i = ++i + ++i;
cout<<i;
发布于 2008-12-04 11:44:18
副作用的顺序在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;
发布于 2008-12-04 11:47:18
这是未定义的行为,结果将根据您使用的编译器而有所不同。例如,请参见C++ FAQ Lite。
发布于 2008-12-04 11:44:52
在您的特定编译器上,它选择先执行这两个++操作,然后再执行加法。它将代码解释为:
int i = 5;
++i;
++i;
i = i + i;
cout << i;
这是完全正确的。
https://stackoverflow.com/questions/340282
复制相似问题