オブジェクトが関数から値で返されるとき、それらのコピーコンストラクターが呼び出されることを理解しています。クラスに削除されたコピーコンストラクタがある場合、値による戻りは失敗します。
struct X {
X(const X &) = delete;
};
X f() {
return X{};
}
error: call to deleted constructor of 'X'
C ++ 11は、拡張初期化子を提供します。そして私はSOの投稿のどこかでこれを読んだ
X f() {
return {};
}
と同じです
X f() {
return X{};
}
では、なぜ以下のコードでエラーが発生しないのですか?それは合格し、mainで関数を呼び出すことさえできます:
struct D {
D(const D &) = delete;
};
D f() { return {}; }
int main()
{
f();
}
これがデモです。エラーは報告されません。コピーコンストラクターを呼び出す必要があると思うので、それは奇妙だと思います。エラーが発生しない理由を誰かが説明できますか?