C 11 移動コンストラクターは呼び出されません。デフォルトのコンストラクターが優先されます
質問:
C 内11、別のオブジェクトを介してオブジェクトをインスタンス化するときに、移動コンストラクターが呼び出されるはずのときに呼び出されないのはなぜですか?
回答:
インスタンス化の際、コンパイラは時折、コピー省略として知られる手法を適用します。コピー省略を使用すると、コピーまたは移動のコンストラクター/デストラクターのペアをバイパスして、一時オブジェクトをコピーまたは移動先のターゲットに直接構築できます。
標準では、次の状況でコピー省略が許可されます。
指定された例では、X("test") で z をインスタンス化すると、バインドされていない一時オブジェクトと見なされるため、コピー省略が発生します。参考に。その結果、これは、移動コンストラクターをバイパスし、代わりにデフォルトのコンストラクターを使用して z に直接構築されます。
明示的に move(X("test")) を呼び出すと、コピーの省略が防止され、移動コンストラクターの使用が強制されます。 、変更された出力に見られるように。
以上がオブジェクトを別のオブジェクトでインスタンス化するときに C 11 の move コンストラクターが呼び出されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。