const 数据成员阻止自动生成复制和移动 ctors?
A const data member prevents automatic generation of both copy and move ctors?
考虑以下 class:
struct A
{
int const x;
A(int x) : x(x) { }
}
这个 class 会自动生成移动和复制 ctors 吗?或者这是由于 const
字段成员 x
的存在而阻止的?
根据我的经验,答案是不会生成移动和复制 ctors,但我没有在标准中明确提及这一点。标准中是否有任何内容暗示在这种情况下不会生成移动和复制 ctors?
当然,同样的问题也适用于 move/copy 作业。
复制和移动构造函数将被声明为默认的,而不是被定义为删除的(即它们将被生成)。它们将具有预期的行为(回想一下非类类型的“移动构造函数”对源对象没有影响)。
根据 [class.copy]/23:
,复制和移动赋值运算符将被声明为默认值,但将被定义为已删除
A defaulted copy/move assignment operator for class X
is defined as deleted if X
has [...]
- a non-static data member of
const
non-class type (or array thereof) [...]
考虑以下 class:
struct A
{
int const x;
A(int x) : x(x) { }
}
这个 class 会自动生成移动和复制 ctors 吗?或者这是由于 const
字段成员 x
的存在而阻止的?
根据我的经验,答案是不会生成移动和复制 ctors,但我没有在标准中明确提及这一点。标准中是否有任何内容暗示在这种情况下不会生成移动和复制 ctors?
当然,同样的问题也适用于 move/copy 作业。
复制和移动构造函数将被声明为默认的,而不是被定义为删除的(即它们将被生成)。它们将具有预期的行为(回想一下非类类型的“移动构造函数”对源对象没有影响)。
根据 [class.copy]/23:
,复制和移动赋值运算符将被声明为默认值,但将被定义为已删除A defaulted copy/move assignment operator for class
X
is defined as deleted ifX
has [...]
- a non-static data member of
const
non-class type (or array thereof) [...]