Roh*_*nga 13 c++ operator-precedence undefined-behavior
x = 1;
std::cout << ((++x)+(++x)+(++x));
Run Code Online (Sandbox Code Playgroud)
我希望输出是11,但实际上12.为什么?
Art*_*ius 12
正如其他人所说,C和C++标准没有定义它将产生的行为.
但对于那些不明白为什么标准会做这样的事情的人来说,让我们来看一个"现实世界"的例子:
1 * 2 + 3 + 4 * 5
Run Code Online (Sandbox Code Playgroud)
1 * 2 + 3在我们计算之前计算没有错4*5.仅仅因为乘法具有比加法更高的优先级并不意味着我们需要在进行任何加法之前在表达式中执行所有乘法.事实上,您有效地执行计算有许多不同的订单.
如果评估有副作用,则不同的评估顺序会影响结果.如果标准没有定义行为,请不要依赖它.
| 归档时间: |
|
| 查看次数: |
2442 次 |
| 最近记录: |