如果我们从函数返回指针,我们可以写
const X* f();
或者
X* const f();
,以这种方式控制是否可以重新分配指针或是否可以在内部修改类。但是在返回引用时,这两个似乎具有相同的含义:
const X& f();
X& const f();
似乎不可能返回可以修改 X 的引用,但不能重新分配它?如果这确实是不可能的,当指针在这个领域看起来很有效时,我们为什么要返回引用呢?
更新:正如所指出的,不能重新分配引用。然而,这让我更加困惑,因为下面的代码打印 33 55,而不是我期望的 33 33。那与不能重新分配引用的匹配如何?
struct X
{
X(int i_) { i = i_;}
int i;
};
struct Y
{
X& get2() {tmp2 = new X(55); return *tmp2;}
X& get() {tmp = new X(33); return *tmp;}
void print () {cout << tmp->i << endl;}
X* tmp;
X* tmp2;
};
int _tmain(int argc, _TCHAR* argv[])
{
Y y;
X& tmp2 = y.get2();
X& tmp = y.get();
y.print();
tmp = tmp2;
y.print();
return 0;
}