如果类具有 const 成员,则 move-assignment 运算符定义为已删除?

move-assignment operator is defined as deleted if the class has a const member?

提问人:Aqiu 提问时间:6/14/2021 最后编辑:songyuanyaoAqiu 更新时间:6/14/2021 访问量:284

问:

它说“与 Copy-assignment 运算符一样,如果类具有 const 或 reference 成员,则 move-assignment 运算符被定义为已删除C++

我写了一个演示,如下所示。

#include <iostream>

class A {
public:
    A() : mem(0) {}
    const int mem;
};

int main()
{
    A a1, a2 = std::move(a1);
    return 0;
}

它在类中有成员,但为什么它可以成功编译?我错过了什么?constA

C++ 初始化 变量赋值 赋值运算符

评论


答:

4赞 songyuanyao 6/14/2021 #1

因为这不是同化,而是初始化。 通过 Move 构造函数初始化,但不是 Move Assignment 运算符。a2std::move(a1)

如果将代码更改为以下代码,则会出现错误:

A a1;
A a2;
a2 = std::move(a1); // assignment