2

该声明

隐式声明的移动赋值运算符

如果没有为类类型(结构、类或联合)提供用户定义的移动赋值运算符,并且以下所有情况都为真:

没有用户声明的复制构造函数;
没有用户声明的移动构造函数;
没有用户声明的复制赋值运算符;
没有用户声明的析构函数;

使用用户声明的复制分配运算符是否仅表示

类名 & 类名 :: operator= ( 类名 && )

任何 operator=()定义?

例子:

class Bar
{
public:
   Bar() = default;
   SomeClass some;
};

class Foo
{
public:
   Foo() = default;

   Foo& operator=(Bar&& bar) : some(std::move(bar.some))
   {
   }

   SomeClass some;
};

这是否符合隐式声明的移动赋值运算符的条件?

隐式声明的移动构造函数也是如此。

4

1 回答 1

2

请注意,它说的是“用户声明的复制赋值运算符”(强调我的)。并非每个赋值运算符都是复制赋值运算符。

对于 class X复制赋值运算符定义为operator=接受类型为XX&const X&volatile X&或的参数const volatile X&。因此,您Foo::operator=(Bar&&)不是复制赋值运算符,因此不会影响移动(或复制)赋值运算符的隐式声明。

于 2018-05-03T08:00:25.680 回答