我在许多地方都读过有关参考资料的内容:
引用就像一个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
那么“引用无法重新定位”是什么意思?
答案 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'的别名。