首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >I= ++i + ++i;在C++中

I= ++i + ++i;在C++中
EN

Stack Overflow用户
提问于 2008-12-04 11:35:56
回答 6查看 7.6K关注 0票数 18

有人能给我解释一下为什么这个代码打印14吗?我刚被另一个学生问了,但我想不出答案。

代码语言:javascript
复制
int i = 5;
i = ++i + ++i;
cout<<i;
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-12-04 11:44:18

副作用的顺序在C++中没有定义。此外,在一个表达式中修改一个变量两次没有定义的行为(参见C++ standard,§5.0.4,物理第87页/逻辑第73页)。

解决方案:不要在复杂的表达式中使用副作用,不要在简单的表达式中使用多个副作用。启用编译器可以给你的所有警告也不会有什么坏处:将-Wall(gcc)或/Wall /W4(Visual C++)添加到命令行会产生一个合适的警告:

代码语言:javascript
复制
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

显然,代码编译为:

代码语言:javascript
复制
i = i + 1;
i = i + 1;
i = i + i;
票数 44
EN

Stack Overflow用户

发布于 2008-12-04 11:47:18

这是未定义的行为,结果将根据您使用的编译器而有所不同。例如,请参见C++ FAQ Lite

票数 16
EN

Stack Overflow用户

发布于 2008-12-04 11:44:52

在您的特定编译器上,它选择先执行这两个++操作,然后再执行加法。它将代码解释为:

代码语言:javascript
复制
int i = 5;
++i;
++i;
i = i + i;
cout << i;

这是完全正确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/340282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档