参考 - const指针

时间:2012-07-10 08:46:55

标签: c++ reference

我在许多地方都读过有关参考资料的内容:

  

引用就像一个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

那么“引用无法重新定位”是什么意思?

3 个答案:

答案 0 :(得分: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引用,编译器会将它们的生命周期延长到参考的生命周期。

关于引用和常量指针之间差异的更多详细信息可以在this SO post的答案中找到。

答案 1 :(得分:6)

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

答案 2 :(得分:6)

int &rx = x;使rx成为x的别名。

然后,rx = y暗示x = y

在制作别名后,对它的任何使用(rx)都相当于使用x。这样您就无法撤消(重置rx)以使rx成为'y'的别名。