如果我们从函数返回指针,我们可以写任何一个
const X* f();
Run Code Online (Sandbox Code Playgroud)
要么
X* const f();
Run Code Online (Sandbox Code Playgroud)
,以这种方式控制是否可以重新分配指针或是否可以在内部修改类.但是当返回引用时,这两个似乎具有相同的含义:
const X& f();
X& const f();
Run Code Online (Sandbox Code Playgroud)
似乎不可能返回一个你可以修改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;
}
Run Code Online (Sandbox Code Playgroud)
Alo*_*ave 10
似乎不可能返回一个你可以修改X的引用,但不能重新分配它?
永远不能重新分配参考文献.他们在初始化时不断引用它们所绑定的相同指示物.
当指针在这个区域看起来有效时,为什么我们应该返回引用呢?
参考用法更直观,函数调用者可以像引用一样使用引用,而不像用户必须处理解除引用等的指针.