返回对类数据成员的引用,然后尝试更改该成员

Dan*_*el 5 c++ reference

我看过其他文章,但还没有真正了解发生了什么。

所以说我有这个代码:

template<typename T>struct S {
    S(T value):val{value}{}
    T& get(){return val;}
private:
    T val;
};
int main(){
S<int>s1{5};
int n = s1.get();
n = 10;
std::cout<<s1.get();
}
Run Code Online (Sandbox Code Playgroud)

印出:5

我的问题是,为什么当我更改n的值时,如果我返回对val的引用,val的值不会改变?

Jef*_*ica 5

将结果存储在其中时,int n将创建一个副本。尝试:

int &n = s1.get();
Run Code Online (Sandbox Code Playgroud)


Ton*_*ony 5

如果你这样做

int& n = s1.get();
n = 10;
std::cout << s1.get();
Run Code Online (Sandbox Code Playgroud)

您会看到10。