構造体のオーバーロード演算子に関する混乱
リーリー ###真ん中### リーリー関数とは何ですか?
これら 2 つのステートメントを削除しても、コンパイルは正常に完了しますが、
リーリー
はコンパイルエラーになりますが、
正常にコンパイルできます
構造体の初期化は行うべきではありません
big n(123);Xiaobi が試したところ、結果に違いがないことがわかりました。原則は何ですか?
神が助けてくれることを願っています
伊谢尔伦2017-06-12 09:26:48
リーリー投稿の引用: http://www.cnblogs.com/chio/a…。割り当ては 2 つの既存のオブジェクト間で実行されますが、初期化では新しいオブジェクトが作成され、その初期値は別の既存のオブジェクトから取得されます。コンパイラはこれら 2 つの状況を区別し、代入中にオーバーロードされた代入演算子を呼び出し、初期化中にコピー コンストラクターを呼び出します。クラスにコピー コンストラクターがない場合、コンパイラーはデフォルトのコンストラクターを提供します。このデフォルトのコピー コンストラクターは、クラスのすべてのメンバーを単純にコピーします。
コピーコンストラクターは次のように呼ばれます:
リーリーもちろん、コメントした後はエラーが発生します、そして
リーリーデフォルトのコンストラクターが最初に呼び出され、次に代入演算子が呼び出されるため、2 つの関数をコメントアウトしても問題はありません。
自分でデバッグできます。