返回类数据成员的引用并尝试更改该成员

5

我看到有关此问题的其他帖子,但还没有完全理解发生了什么。

假设我有以下代码:

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();
}

这将打印:5

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


3
因为 n 没有参考,无论它初始化为什么,都不会有影响。 - Quentin
尝试使用 int& n = s1.get(); - πάντα ῥεῖ
哦,好的,所以我需要定义一个引用变量,基本上就是这样,谢谢! - Daniel
那么从函数返回引用有什么用途呢? - Daniel
@Daniel 如果你没有返回一个引用,你就不能执行 int& n = s1.get(); - François Andrieux
2个回答

5

如果你进行

int& n = s1.get();
n = 10;
std::cout << s1.get();

您将看到10。


5

当你将结果存储在int n中时,你创建了一份副本。尝试使用以下代码:

int &n = s1.get();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接