考虑以下代码:
#include <iostream>
int main()
{
int i = 0;
std::cout << ++i << ' ' << --i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
Nicolai Josuttis 在他的《C++17 完整指南》一书中写道,在C++17之前,这个特定的示例可能会产生不可预测的结果。和1 0都0 1可能被产生,但更重要的0 0是还有可能的输出。我不明白为什么第三个序列应该被考虑为可能的。应该在评估第二个值之前评估++ior ,根据定义,第二个值不能产生两个零,不是吗?--i
在C++17之前,0 0结果大概是这样的。
++i被评估。i现在商店1。该表达式的结果(重要的是,它是对 的左值引用i,而不是右值1)被保留为运算符的参数<<。--i被评估。i现在商店0。该表达式的结果(重要的是,它是对 的左值引用i,而不是右值0)被保留为运算符的参数<<。<<运算符被求值,其中两个参数都是对ivalue 的引用0。| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |