const数据成员阻止自动生成复制和移动ctors?

时间:2015-07-30 19:36:50

标签: c++11 const copy-constructor move-semantics move-constructor

考虑以下课程:

struct A 
{ 
    int const x;
    A(int x) : x(x) { }  
}

这个类会自动生成移动和复制ctors吗?或者const字段成员x

的存在阻止了这种情况

根据我的经验,答案是不会生成移动和复制ctors,但我还没有在标准中明确提到这一点。标准中是否有任何暗示在这种情况下不会生成移动和复制ctors?

当然,同样的问题适用于移动/复制作业。

1 个答案:

答案 0 :(得分:4)

复制和移动构造函数将被声明为默认值,并且未定义为已删除(即,将生成它们)。它们将具有预期的行为(回想一下非类类型的“移动构造函数”对源对象没有影响)。

复制和移动赋值运算符将被声明为默认值,但将根据 [class.copy] / 23定义为已删除:

  

如果X有[...]

,则X类的默认副本/移动分配运算符被定义为已删除      
      
  • const非类型(或其数组)的非静态数据成员[...]
  •