- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:参照について)
C++初心者による参照の違いについて
このQ&Aのポイント
- C++初心者がFooクラスのoperatorを参照にすると出力がBになり、参照なしの場合はB Aになる。
- operatorに参照を設定すると出力がB、参照なしの場合はB Aとなる理由を教えてください。
- C++のoperatorの参照の有無による出力結果の違いについて、詳しく教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
参照とコピーの違いですね x = Foo(); について何が起こっているか考えてみましょう。 1.Foo()でFoo型の一時変数が生成されます(コンストラクタが走る) 2.operator=()が実行されます(ここで戻り値がFooかFoo&の違いが出るところ) 3.xに戻り値が代入されます 2.のところでFoo operator=(const Foo&)の場合 return *this; とされていますが、戻り値がFooなのでここで新たに一時変数が生成され、コピーコンストラクタが走ります ところが、Foo& operator=(const Foo&)の場合では、 参照(自分そのもの)を返り値になっていますので x = Foo(); // ここでできたFooの一時変数がそのままxに代入されます。 参照返しの場合はoperator=()内で一時変数が生成されないので当然コピーコンストラクタも呼ばれません。 こんな感じで分かりますでしょうか?
お礼
分かりやすい説明ありがとうございます。おかげ様で理解できました。 コピーコンストラクタについて理解が不十分でした。