0

重複の可能性:
暗黙のコピー コンストラクター/代入演算子の動作
C++ - デフォルト ctor、コピー ctor、およびデフォルト代入演算子の自動生成の条件?

オーバーロードされた代入演算子が常に C++ コンパイラによって提供されるというのは本当ですか? C++ コンパイラによって提供されない場合はどのような場合ですか?

4

2 に答える 2

2

Assignment/Copy Assignment( ) 演算子は、クラスにメンバーがあるか参照し =ていない限り、C++ コンパイラによって暗黙的に提供されます。const

メンバーの場合、constコンパイラは提供できません。これは、初期化後にメンバーを =変更しないという契約が破られるためです。const

=参照メンバーの場合、適切な動作の決定はクラスのユーザーに委ねられるため、コンパイラは提供しません。

于 2012-06-07T17:59:27.510 に答える
1

オーバーロードされた代入演算子が常に C++ コンパイラによって提供されるというのは本当ですか。

独自の代入演算子を宣言しない場合、コンパイラは(常に)暗黙的に宣言します。それを使用すると、コンパイラは暗黙的に(常に)それを定義します。

Als の回答には、特定の条件下では定義されないというよくある誤解があります。それは間違っています。型に定数メンバーまたは参照があるかどうかはまったく問題ではありません。コンパイラはそれを宣言および定義します。これらのケースの状況は、暗黙的に定義されたコンパイラがコンパイルに失敗することです。

コンパイラでそれを試すと、エラーは代入演算子の欠落ではなく、暗黙的に定義された代入のコンパイル中のエラーを示します。

于 2012-06-07T18:29:55.880 に答える