0

ここで StackOverflow を見ると、Clang++ で C++11 標準を使用しているときに、クラスに移動コンストラクターを定義している場合、暗黙的なコンストラクターの生成が無効になっていることがわかりました。つまり、コピー コンストラクターは「明示的に削除」されます。

この動作を無効にする方法はありますか?

また、この動作は標準化されていますか? 私はGCCで同じ振る舞いをしていないからです。

4

1 に答える 1

8

この動作を無効にする方法はありますか?

いいえ。ただし、いつでも次のことができます。

A(const A&) = default;

ただし、clang が現在デフォルトのコピー コンストラクターを完全に実装しているかどうかはわかりません。

また、この動作は標準化されていますか?

はい。[class.copy]/p7:

クラス定義でコピー コンストラクターが明示的に宣言されていない場合は、暗黙的に宣言されます。クラス定義でムーブ コンストラクターまたはムーブ代入演算子が宣言されている場合、暗黙的に宣言されたコピー コンストラクターは削除済みとして定義されます。...

...

私はGCCで同じ振る舞いをしていないからです。

どのバージョン?最新の gcc バージョンは、clang と同じ動作をしていると思います。しかし、私は実験するために利用できるものを持っていません。

于 2012-01-10T04:04:57.200 に答える