假设我们有下一个代码:
#include<iostream>
using namespace std;
int change(int &temp){
temp += 2;
return 10;
}
int main(){
int nmb = 2;
cout << change(nmb) << " " << nmb << endl;
}
我认为它应该像cout一样可以打印出nmb的新值,但它可以打印nmb的旧版本。
我得到的结果不是10,而是结果10 2。
为什么cout会打印出旧的nmb值,因为cout首先打印出变化,然后再打印nmb?
我已经使用标准c++ 11在g++下编译了它。
最佳答案
不,评估的顺序是实现定义的。
直到C++ 17才确定评估顺序。 (请参阅评论和M.M的答案。)
http://en.cppreference.com/w/cpp/language/eval_order
关于c++ - cout变量和通过引用更改变量的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47744032/