参考 - const指针

cpp*_*der 6 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";
}
Run Code Online (Sandbox Code Playgroud)

产量

5  
8
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*son 13

这一行:

rx = y;
Run Code Online (Sandbox Code Playgroud)

不要使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";
}
Run Code Online (Sandbox Code Playgroud)

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

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

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


Tor*_*zki 6

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


Che*_*han 6

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

然后,rx = y暗示x = y

在创建别名之后,任何使用它(rx)都将等效于使用x.这样你就无法撤消(重新设定rx)来制作rx别名'y'.

  • no:_an alias of_表示_指向存储位置_,而不是_的值与_具有相同的值 (3认同)