cout如何运作? (C ++)

时间:2015-06-06 19:10:36

标签: c++

这有什么区别? 我认为这两个版本应该是平等的,但显然它们不是。 你能解释一下第一个如何运作吗?为什么打印222而不是122?

#include <iostream>
using namespace std;

int main() {
    int a = 1;
    /* #1: prints 222
    cout << a << (a = 2) << a << endl;
    */

    /* #2: prints 122
    cout << a;
    cout << (a = 2);
    cout << a << endl;
    */
    return 0;
}

1 个答案:

答案 0 :(得分:0)

据我所知,您无法保证评估<<表达式的子表达式的顺序。在第一个版本中,您的编译器决定在第一个输出之前执行赋值。

然而,第二个版本使操作顺序显式。分号清楚地表明打印操作应该在赋值操作之前进行。

这与例如评估不同。二元算子,由于短路,副作用的顺序是从左到右。