传递通过引用。 C ++中的函数。 cout stream

时间:2015-06-17 06:25:19

标签: c++

你能解释一下为什么我得到这个输出?我希望看到:
2 4 2
3 9 9
而我有:
2 4 2
9 9 3

#include <iostream>

using namespace std;

int sq1(int);
int sq2(int&);

int main() {
    int x = 2, y = 3;

    cout<<x<<"  "<<sq1(x)<<"  "<<x;
    cout<<endl;
    cout<<y<<"  "<<sq2(y)<<"  "<<y;

    return 0;
}

int sq1(int n) {
    n *= n;
    return n;
}

int sq2(int &n) {
    n *= n;
    return n;
}

2 个答案:

答案 0 :(得分:4)

在第

cout<<y<<"  "<<sq2(y)<<"  "<<y;

您正在修改y。无法保证每个表达式的计算顺序。

相关:here is demofunction parameter evaluation order

答案 1 :(得分:1)

这是未定义的行为。无法保证表达式的评估顺序。但是在这种情况下,评估是从右到左完成,然后从左到右打印,所以首先评估y到最后一个是3,然后将其更改为9 in该功能再次打印输出

9 9 3