ホームページ  >  に質問  >  本文

C++ 構造を使用して高精度のテンプレートを作成する際のコンストラクター関数の問題

構造体のオーバーロード演算子に関する混乱

リーリー ###真ん中### リーリー

関数とは何ですか?

これら 2 つのステートメントを削除しても、コンパイルは正常に完了しますが、

リーリー
はコンパイルエラーになりますが、

リーリー

正常にコンパイルできます

構造体の初期化は行うべきではありません


big n(123);
Xiaobi が試したところ、結果に違いがないことがわかりました。原則は何ですか?神が助けてくれることを願っています

三叔三叔2657日前1033

全員に返信(1)返信します

  • 伊谢尔伦

    伊谢尔伦2017-06-12 09:26:48

    投稿の引用: http://www.cnblogs.com/chio/a…。割り当ては 2 つの既存のオブジェクト間で実行されますが、初期化では新しいオブジェクトが作成され、その初期値は別の既存のオブジェクトから取得されます。コンパイラはこれら 2 つの状況を区別し、代入中にオーバーロードされた代入演算子を呼び出し、初期化中にコピー コンストラクターを呼び出します。クラスにコピー コンストラクターがない場合、コンパイラーはデフォルトのコンストラクターを提供します。このデフォルトのコピー コンストラクターは、クラスのすべてのメンバーを単純にコピーします。

    リーリー

    コピーコンストラクターは次のように呼ばれます:

    リーリー

    もちろん、コメントした後はエラーが発生します、そして

    リーリー

    デフォルトのコンストラクターが最初に呼び出され、次に代入演算子が呼び出されるため、2 つの関数をコメントアウトしても問題はありません。

    自分でデバッグできます。

    返事
    0
  • キャンセル返事