Ash*_*yan 4 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);
}
Run Code Online (Sandbox Code Playgroud)
但当我更改赋值运算符参数为非const编译器打印错误时:
MyClass& operator=(MyClass& m) { std::cout << "Copy assignment operator!" << std::endl; }
error: no match for ‘operator=’ (operand types are ‘MyClass’ and ‘MyClass’)
Run Code Online (Sandbox Code Playgroud)
我想知道原因.提前致谢.
因为这MyClass&使你operator=没有const一个正确的赋值运算符.必须是operator=(const MyClass&)(或者operator=(MyClass)不要这样做,除非你知道你在做什么,复制 - 交换......).
否则,您的代码d = MyClass(a)无法编译,因为非const引用不会绑定到临时(r值),例如MyClass(a).
注意,即使没有const,d = a 也会编译一个代码,因为a它不是r值.但是,它仍然不是一个合适的赋值运算符.