【发布时间】:2012-07-10 08:46:55
【问题描述】:
我在很多地方读过关于参考的文章:
引用就像一个常量指针
引用总是指向一个对象
一旦初始化,引用就不能被重新安置
我想明确最后一点。这是什么意思?
我试过这段代码:
#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
那么“引用不能被重新定位”是什么意思呢?
【问题讨论】:
-
不要认真对待
Reference is like a const pointer的断言。这是错误的。然后在main()做std::cout<<x<<"\n";你会得到8。 -
引用是就像一个常量指针。它不 像一个指向常量的指针。详情见文章here。
-
@AlexWilson 我不想让 cppcoder 误以为引用在某种程度上类似于常量指针。通常可以说“在访问被引用对象方面,引用表现类似于常量指针”。但它们在很多方面都是不同的实体。
-
@AlexWilson:一般来说,无论你熟人的编译器做什么或你认为它做什么,你的陈述(以及下面的答案)仍然是错误的。为什么您的假设错误的一个简单示例是临时对象生命周期延长。这永远不会发生在 const 指针上。如果引用衰减为指针,您的编译器将因此无法遵守标准提供的保证。
-
@Damon。现在这是一个很好的观点。我向所有人道歉。我会酌情更新。