以下代码编译没有问题
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’)
我想知道原因。提前谢谢。
答案 0 :(得分:6)
因为MyClass&
使operator=
const
没有operator=(const MyClass&)
而不是正确的作业运算符。它必须是operator=(MyClass)
(或d = MyClass(a)
但不要这样做,除非你知道自己在做什么,复制和放置......)。
否则,您的代码MyClass(a)
无法编译,因为非const引用不会绑定到临时(r值),例如const
。
请注意,即使没有d = a
,a
等代码也会编译,因为{{1}}不是 r值。但是,它仍然不是一个合适的赋值运算符。