考虑以下课程:
struct A
{
int const x;
A(int x) : x(x) { }
}
这个类会自动生成移动和复制ctors吗?或者const
字段成员x
?
根据我的经验,答案是不会生成移动和复制ctors,但我还没有在标准中明确提到这一点。标准中是否有任何暗示在这种情况下不会生成移动和复制ctors?
当然,同样的问题适用于移动/复制作业。
答案 0 :(得分:4)
复制和移动构造函数将被声明为默认值,并且未定义为已删除(即,将生成它们)。它们将具有预期的行为(回想一下非类类型的“移动构造函数”对源对象没有影响)。
复制和移动赋值运算符将被声明为默认值,但将根据 [class.copy] / 23定义为已删除:
如果
,则X
有[...]X
类的默认副本/移动分配运算符被定义为已删除
const
非类型(或其数组)的非静态数据成员[...]