它是如何工作的?(c++)

How does cout work? (C++)

本文关键字:c++ 工作 何工作      更新时间:2023-10-16

有什么不同?我认为这两个版本应该是相等的,但显然它们不是。你能解释一下第一个是怎么工作的吗?为什么打印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;
}

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

然而,第二个版本明确了操作顺序。分号表明打印操作应该发生在赋值操作之前。

这与二元操作符的求值不同,由于短路,副作用的顺序是从左到右。