柴田望洋著、「新明解c++入門」の一節に
"参照オブジェクトの宣言時には、必ず参照先オブジェクトを与えて初期化する必要があります。なお、いったん作られた参照オブジェクトへの代入は値の代入です。そのため、a = y;
を実行すると、aにyの値が代入されます。aの参照先がyに更新されることはありません。"
と書いてありました。ここでa,yとはこの直前で著者が例として挙げた以下のコードのものです。
c++
1#include <iostream> 2 3using namespace std; 4 5int main() 6{ 7 int x = 1; 8 int y = 2; 9 int& a = x; 10 11 cout << "a = " << a << '\n'; 12 cout << "x = " << x << '\n'; 13 cout << "y = " << y << '\n'; 14 15 a = 5; 16 17 cout << "a = " << a << '\n'; //5 18 cout << "x = " << x << '\n'; //5 19 cout << "y = " << y << '\n'; //2 20}
ここまでは理解できるのですが、その一節の通りに以下のコードを実行すると次のような結果になっていました。
C++
1a = y; 2cout << a << endl; //2 3cout << x << endl; //2 4cout << y << endl; //2 5``` 6これは、aの参照先xがyに書き換えられており、"aの参照先がyに更新されることはありません"という文に矛盾しているように感じられてしまうのですが、なぜこのような結果になってしまうのでしょうか。 私がこの文章の意味を履き違えているだけなのかもしれません。ご指摘していただけますか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/19 03:12