現在のC++標準では、次の場合の要件は何ですか?このコードでコピーまたは移動コンストラクタを呼び出す必要があります
我々は次のコードがあるとします。
#include <iostream>
struct Foo
{
Foo() { std::cout << "Foo::Foo()" << std::endl; }
Foo(Foo&) { std::cout << "Foo::Foo(Foo&)" << std::endl; }
Foo(Foo&&) { std::cout << "Foo::Foo(Foo&&)" << std::endl; }
~Foo() { std::cout << "Foo::~Foo()" << std::endl; }
};
struct Bar
{
Foo foo;
};
int main()
{
Bar instance{ Foo{} };
}
は、任意の実装は、標準に従って、ここで何をすべきでしょうか?コンストラクタのコピーと移動の両方が存在する必要があります(削除されません)。どちらを呼びますか?
可能な重複:あなたはコピーの初期化をオプトアウトと直接初期化を行う場合はさておき、あなたが移動の両方を削除することができますし、同様にC++ 14でc'torsをコピーとして
[コピーエリッションと戻り値の最適化とは何ですか?](https://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization) –