重複の可能性:
暗黙のコピー コンストラクター/代入演算子の動作
C++ - デフォルト ctor、コピー ctor、およびデフォルト代入演算子の自動生成の条件?
オーバーロードされた代入演算子が常に C++ コンパイラによって提供されるというのは本当ですか? C++ コンパイラによって提供されない場合はどのような場合ですか?
重複の可能性:
暗黙のコピー コンストラクター/代入演算子の動作
C++ - デフォルト ctor、コピー ctor、およびデフォルト代入演算子の自動生成の条件?
オーバーロードされた代入演算子が常に C++ コンパイラによって提供されるというのは本当ですか? C++ コンパイラによって提供されない場合はどのような場合ですか?
Assignment/Copy Assignment( ) 演算子は、クラスにメンバーがあるか参照し =
ていない限り、C++ コンパイラによって暗黙的に提供されます。const
メンバーの場合、const
コンパイラは提供できません。これは、初期化後にメンバーを =
変更しないという契約が破られるためです。const
=
参照メンバーの場合、適切な動作の決定はクラスのユーザーに委ねられるため、コンパイラは提供しません。
オーバーロードされた代入演算子が常に C++ コンパイラによって提供されるというのは本当ですか。
独自の代入演算子を宣言しない場合、コンパイラは(常に)暗黙的に宣言します。それを使用すると、コンパイラは暗黙的に(常に)それを定義します。
Als の回答には、特定の条件下では定義されないというよくある誤解があります。それは間違っています。型に定数メンバーまたは参照があるかどうかはまったく問題ではありません。コンパイラはそれを宣言および定義します。これらのケースの状況は、暗黙的に定義されたコンパイラがコンパイルに失敗することです。
コンパイラでそれを試すと、エラーは代入演算子の欠落ではなく、暗黙的に定義された代入のコンパイル中のエラーを示します。