理解 C++ 中的引用

nz_*_*_21 2 c++ reference

我有以下代码:

int main() {
    int x = 3;
    int &ref = x;
    int &ref2 = ref;
    ref = 100;
    std::cout <<ref;
    std::cout <<ref2;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这打印出来100100。我觉得很混乱。我的理解是,refref2都是对底层对象 ( x=3) 的引用。然后我们改变 的值ref。因此,我预期1003

Bat*_*eba 6

你永远不要改变ref(语言不会让你重新绑定的引用)。实际上,这就是为什么在创建引用时需要使用引用初始化的原因:int &ref; ref = x;例如,您不能编写。

该语句ref = 100;更改引用绑定到的对象的值。

因此xref、 和的输出ref2是相同的。


Use*_*ess 5

我的理解是 ref 和 ref2 都是对底层对象的引用 (x=3)

是的。

好吧,它们都是对 的引用x,其初始值为3。本质上,您有一个整数对象,您可以通过名称中的任何名称来引用它xref或者ref2

然后我们改变 ref 的值

不,你是在自相矛盾。

对象有值。参考喜欢ref不是对象,但对象的引用,他们不具有自己的价值变动。

你说这ref是一个引用,这是真的——它是一个对 int 类型对象的引用,它可以接受一个值,当你写ref = 100. 该名称xref并且ref2还指的是相同的整数对象之后,但现在它的价值是100不是3

您不能重新设置引用(使其引用不同的对象),并且引用没有要更改的值。它引用一个对象,它的值可以通过引用改变。


注意。我不认为这个问题与Can we reassign the reference完全相同,即使它包含一些相同的误解。