2012-03-14 10 views
0

C++に関するよくある質問C++での参照の変更

「別のオブジェクトを参照するために参照を再インストールするにはどうすればいいですか?

しかし、これを実行すると、コンパイルされて正常に実行されます。

int f = 5; 
int y =4; 
int& u = f; 
u = y; 
B& bRef = B(); 
bRef = B(); 

このコードは、私のmain()関数の中にあります。 C++よくある質問https://isocpp.org/wiki/faq/references#reseating-refs

答えて

2

リンクあなたは単に参照されるオブジェクトに割り当てる、参照を取り付け直しません。

#include <iostream> 

struct X{ 
    void operator=(X const&){ 
    std::cout << "Woops, assignment!\n"; 
    } 
}; 

int main(){ 
X x, y; 
X& rx = x; 
rx = y; 
} 

Guess what this prints.

+0

ありがとう。非常に良い例。 – wayfare

0

u = y;を言いながらあなたは、参照を変更していません。変数fyの値を代入しています。これはまだuで参照されています。

fの値を確認してください。

1

intと書いて& u = f; u = yとする。 fとしてyの値を代入するときは、参照uによって参照されます。したがって、参照を再設定するのではなく、単にfの値を変更します。

Why is it illegal/immoral to reseat a reference?

0

呼び出す 'をU yを=;'、ちょうどuは(そのF)を参照する変数にyの値を割り当てます。 基本的に、参照は、さまざまなコンパイラ、 'u = y;'演算の下で 'ポインタ'として実装され、メモリをyの値に設定するだけです。

0

参照の値は、初期化後に変更することはできません。常にそれが初期化されて同じオブジェクトを参照するように指示します..