假设我们有下一个代码:

#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/

10-11 16:30