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

时间:2015-02-07 10:19:00

标签: c++ constructor variable-assignment

以下代码编译没有问题

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);
}

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

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

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

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

1 个答案:

答案 0 :(得分:6)

因为MyClass&使operator= const没有operator=(const MyClass&)而不是正确的作业运算符。它必须是operator=(MyClass)(或d = MyClass(a)但不要这样做,除非你知道自己在做什么,复制和放置......)。

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

请注意,即使没有d = aa 等代码也会编译,因为{{1}}不是 r值。但是,它仍然不是一个合适的赋值运算符。