関数からポインタを返す場合は、次のいずれかを記述できます。
const X* f();
また
X* const f();
、このようにして、ポインタを再割り当てできるかどうか、またはクラスを内部で変更できるかどうかを制御します。しかし、参照を返す場合、これら2つは同じ意味を持つようです。
const X& f();
X& const f();
Xを変更できるが、再割り当てできない参照を返すことは不可能のようです。そして、それが本当に不可能な場合、ポインタがこの領域で強力であると思われるときに、なぜ参照を返す必要があるのでしょうか。
更新:指摘されているように、参照を再割り当てすることはできません。しかし、これは私をさらに当惑させます。次のコードは、私が期待する3333ではなく3355を出力するからです。その参照とどのように一致するので、再割り当てできませんか?
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;
}