することは、私たちは、ポインタを再割り当てすることができますまたはクラスが内部で変更することができるかどうかを制御し、このように、なぜcant const参照はポインタと同じ方法で返されますか?私たちは関数からポインタを返す場合
const X* f();
または
X* const f();
のいずれかを書き込むことができます。しかし、参照を返すときに、これらの2つが同じ意味を持っているようだ:あなたがそれを再割り当てXを変更することはできませんが、参照を返すことは不可能と思われる
const X& f();
X& const f();
を?実際には不可能な場合は、ポインタがこの領域で有効に見えるときに参照を返すのはなぜですか?
更新:指摘されているように、参照を再割り当てすることはできません。しかし、これは、私が予想したように、次のコードが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;
}
'X&constのfは();'ナンセンス参照です:http://www.parashift.com/c++-faq-lite/const-correctness.html – EdChum
は、なぜあなたは期待しています"33 33"、あなたはtmp2に 'tmp2'を割り当てましたか? –