c++ - 我 =++i+++i;在 C++ 中

标签 c++ puzzle operator-precedence

有人可以向我解释为什么这段代码会打印 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/

相关文章:

c++ - 如何在 C++ 中一起使用 setw 和 setfill 来填充空格和字符?

c - 运算符优先级问题

c++ - 使用带或不带括号的 C 符号

java - codility 测试回顾 - pair_sum_even_count

go - 位移 << 和乘法 * 优先级

c++ - uintptr_t 存储的是指针的地址还是它的值?

c++ - 重新声明纯虚函数

C++ vector 在 Release模式下未初始化为空

performance - Linq 解谜器

java - 方法更改参数的值