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 回答