C++ 编译错误 - ‘operator=’不匹配

C++ compile error - no match for ‘operator=’

下面的代码编译没有问题

class MyClass
{
public:
  MyClass() { std::cout << "Default Constructor!" << std::endl; }
  MyClass& operator=(const MyClass& m) { std::cout << "Copy assignment operator!" << std::endl; }
};

int main()
{
  MyClass a;
  MyClass d;
  d = MyClass(a);
}

但是当我将赋值运算符参数更改为非常量时编译器打印错误:

MyClass& operator=(MyClass& m) { std::cout << "Copy assignment operator!" << std::endl; }

error: no match for ‘operator=’ (operand types are ‘MyClass’ and ‘MyClass’)

我想知道原因。提前致谢。

因为 MyClass& 使没有 constoperator= 不是正确的赋值运算符。它必须是 operator=(const MyClass&)(或 operator=(MyClass) 但不要这样做,除非你知道自己在做什么,复制和交换...)。

否则,您的代码 d = MyClass(a) 无法编译,因为非常量引用不会绑定到临时(r 值),例如 MyClass(a).

请注意,即使没有 const,像 d = a 这样的代码也会 编译,因为 a 不是 r-值。但是,它仍然不是一个合适的赋值运算符。