具有多变量变量的std :: cout

时间:2016-08-24 05:20:06

标签: c++ pass-by-reference

假设这段代码

int main(){
    int i=0, j=0;

    cout << i << " " << f1(&i,&j) << " " << j << endl;

    cout << i << " " << j << endl;
}

int f1(int *i, int *j){
    *i = 20;
    *j = 30;

    return 10;
}

结果是

20 10 0
20 30

我很困惑,为什么j在我正确显示20

时会为0 编辑:我已经阅读了序列点,但我仍然不确定如何解释这一点。我应该假设在评估f1之前首先评估j,因此j是0而i是20?

1 个答案:

答案 0 :(得分:2)

这件事:

cout << i << " " << f1(&i,&j) << " " << j << endl;

如果您从右到左考虑评估,j最初是0并打印出来。然后,f1被调用,j值更改为30。 但是这种评估顺序是不可预测的