在StackOverflow上查看我在使用C ++ 11标准时发现在Clang ++上,如果已经为您的类定义了一个移动构造函数,则隐式构造函数生成被禁用,即复制构造函数被“删除已删除”。
有没有办法禁用此行为?
此外,这种行为是否标准化?因为我在GCC中没有相同的行为。
答案 0 :(得分:8)
有没有办法禁用此行为?
没有。但你可以随时:
A(const A&) = default;
虽然我不确定clang目前是否完全实现了默认的拷贝构造函数。
此外,这种行为是否已标准化?
是。 [class.copy] / P7:
如果类定义未明确声明副本 构造函数,一个是隐式声明的。如果是类定义 声明一个移动构造函数或移动赋值运算符 隐式声明的复制构造函数被定义为已删除; ...
...
因为我在GCC中没有相同的行为。
哪个版本?我猜想最新的gcc版本与clang具有相同的行为。但我没有可用于试验。