你能解释一下为什么我得到这个输出?我希望看到:
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;
}
答案 0 :(得分:4)
在第
行cout<<y<<" "<<sq2(y)<<" "<<y;
您正在修改y
。无法保证每个表达式的计算顺序。
答案 1 :(得分:1)
这是未定义的行为。无法保证表达式的评估顺序。但是在这种情况下,评估是从右到左完成,然后从左到右打印,所以首先评估y到最后一个是3,然后将其更改为9 in该功能再次打印输出
9 9 3