我在很多地方读过有关参考文献的内容:
Reference is like a const pointer
Reference always refer to an object
Once initialised,a Reference cannot be reseated
我想在最后一点说清楚.那是什么意思?
我试过这段代码:
#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
那么“引用无法重新定位”是什么意思?
解决方法
这一行:
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的答案中找到.