対応した処理が呼ばれる。付けてるのにムーブで破壊されても困るけど。以下のコードではAのコンストラクタは何回呼ばれるだろうか。???一回しか呼ばれない。これはC++の実装でコピー/ムーブ構築を省略しているからなのだそう。コピー省略と呼ばれる。手持ちのコンパイラでは一回しか呼ばれなかった。コピー省略は、以下の場合に許されている。...クラスを返す関数のreturn文のオペランドの式が、関数とcatch句の仮引数を除く非volatileの自動オブジェクトの名前であり、関数の戻り値の型と自動オブジェクトの型が、ともにCV非修飾の型である場合、関数内の自動オブジェクトのコピー/ムーブが省略され、関数の戻り値のオブジェクトとして直接に構築することが許されている。...リファレンスで束縛されていないクラスの一時オブジェクトが、同じCV非修飾の型に、コピー/ムーブされた場合、コピー/ムーブは省略され、コピー/ムーブ先のオブジェクトに、一時オブジェクトを直接構築することが許されている。以下のコードだとまた趣が変わる。getA();↑こうなった。この場合、コンストラクタ、それからムーブかコピー代入が呼ばれる。どちらが呼ばれるかはクラスの実装による。コピー省略できる条件がそろい、コピーされるオブジェクトがlvalueの場合、オーバーロード解決が二回行われることがある。一回目のオーバーロード解決は、オブジェクトをrvalueとして、コピーするコンストラクターを探す。一回目のオーバーロード解決が失敗するか、選択されたコンストラクターの第一引数がrvalueリファレンスではない場合、オブジェクトをlvalueとして、二回目のオーバーロード解決が行われる。一回目のオーバーロード解決で、選択されたコンストラクターの第一引数がrvalueリファレンスではない場合というのは、たとえばconst修飾されたlvalueリファレンスが該当する。この二回のオーバーロード解決は、たとえコピー省略をしないとしても、必ず行われる。この規定の目的は、コピー省略が行われなかったならば呼び出されるコンストラクターの、アクセス指定を調べるためである。コピー省略が行われて代入文右辺に直接構築される。クラスにムーブ代入演算子が定義されていれば、それが呼ばれる。して二回目の解決が行われる。詳細はこちら:http://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#class.copyコメントで教えていただきました。yohhoy氏、ありがとうございました。書き手の脳内リソースを消費し、たまに気が向いたら足を撃ちぬくらしい。次へ名前:投稿者名です。64字以内で入力してください。Eメール:必要な場合はEメールアドレスを入力してください(全体に公開されます)。内容:投稿する内容です。2019NARUPORTnarupoのブログおみくじ小説Webツール。