6

我在很多地方读过关于参考的文章:

引用就像一个 const 指针

引用总是引用一个对象

一旦初始化,引用就不能被重新安装

我想澄清最后一点。这意味着什么?

我试过这段代码:

#include <iostream>
int main()
{
    int x = 5;
    int y = 8;

    int &rx = x;
    std::cout<<rx<<"\n";

    rx = y;    //Changing the reference rx to become alias of y
    std::cout<<rx<<"\n";
}

输出

5  
8

那么“引用无法重新安装”是什么意思?

4

3 回答 3

13

这一行:

rx = y;

不使 rx 指向 y。它使 x 的值(通过引用)成为 y 的值。看:

#include <iostream>

int main()
{
    int x = 5;
    int y = 8;

    int &rx = x;
    std::cout << rx <<"\n";

    // Updating the variable referenced by rx (x) to equal y
    rx = y;    
    std::cout << rx <<"\n";
    std::cout << x << "\n";
    std::cout << y << "\n";
}

因此,在初始赋值后无法更改 rx 所指的内容,但您可以更改所引用事物的值。

因此,就本示例而言,引用类似于常量指针(其中指针地址是常量,而不是该地址处的值)。但是有一些重要的区别,一个很好的例子(正如 Damon 指出的那样)是您可以将临时变量分配给本地 const 引用,编译器将延长它们的生命周期以在引用的生命周期内持续存在。

有关引用和 const 指针之间差异的更多详细信息可以在此 SO 帖子的答案中找到。

于 2012-07-10T08:49:51.070 回答
6

您将 x 的值更改为 y 的值 :-)

于 2012-07-10T08:49:19.480 回答
6

int &rx = x;给 .做rx一个别名x

那么,rx = y暗示x = y

生成别名后,对其 ( rx) 的任何使用将等同于对 x 的使用。您无法撤消(重新安装rx)以创建rx别名“y”。

于 2012-07-10T08:55:55.960 回答