C++11 常数数据成员阻止自动生成复制和移动系数?

C++11 常数数据成员阻止自动生成复制和移动系数?,c++11,constants,copy-constructor,move-semantics,move-constructor,C++11,Constants,Copy Constructor,Move Semantics,Move Constructor,考虑以下类别: struct A { int const x; A(int x) : x(x) { } } 该类是否会自动生成移动和复制复制复制器?或者这是因为存在const字段成员x 根据我的经验,答案是不会生成move和copy构造函数,但我在标准中没有明确提到这一点。标准中是否有任何内容暗示在这种情况下,不会生成移动和复制CTOR 当然,同样的问题也适用于移动/复制作业。复制和移动构造函数将声明为默认值,而不是定义为已删除(即,将生成它们)。它们将具有预期的行为(

考虑以下类别:

struct A 
{ 
    int const x;
    A(int x) : x(x) { }  
}
该类是否会自动生成移动和复制复制复制器?或者这是因为存在
const
字段成员
x

根据我的经验,答案是不会生成move和copy构造函数,但我在标准中没有明确提到这一点。标准中是否有任何内容暗示在这种情况下,不会生成移动和复制CTOR


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

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

根据[class.copy]/23:

如果
X
具有[…],则类
X
的默认复制/移动赋值运算符定义为已删除

  • const
    非类类型(或其数组)[……]的非静态数据成员

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

根据[class.copy]/23:

如果
X
具有[…],则类
X
的默认复制/移动赋值运算符定义为已删除

  • const
    非类类型(或其数组)[……]的非静态数据成员

移动构造函数做什么?它从moved from对象中复制(即使用复制ctor)数据成员
const
。@becko对于非类对象,复制和移动之间没有区别,因此是的。
int
只是数据成员的一种示例类型。但如果这是一门复杂的课,我的问题是正确的。如果数据成员是
const
,则自动移动构造函数只能复制数据成员,对吗?移动构造函数不会在
const
对象上调用,因为移动构造函数的签名是
T(T&&other)
,而不是
T(const T&other)
@rlbond几乎-如果构造函数
T(const T&other)提供了
,则正式成为移动构造函数;但是,它必须是一个非常奇怪的类。move构造函数是做什么的?它从moved from对象中复制(即使用复制ctor)数据成员
const
。@becko对于非类对象,复制和移动之间没有区别,因此是的。
int
只是数据成员的一种示例类型。但如果这是一门复杂的课,我的问题是正确的。如果数据成员是
const
,则自动移动构造函数只能复制数据成员,对吗?移动构造函数不会在
const
对象上调用,因为移动构造函数的签名是
T(T&&other)
,而不是
T(const T&other)
@rlbond几乎-如果构造函数
T(const T&other)提供了
,则正式成为移动构造函数;不过,这一定是一门非常奇怪的课。