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&
使没有 const
的 operator=
不是正确的赋值运算符。它必须是 operator=(const MyClass&)
(或 operator=(MyClass)
但不要这样做,除非你知道自己在做什么,复制和交换...)。
否则,您的代码 d = MyClass(a)
无法编译,因为非常量引用不会绑定到临时(r 值),例如 MyClass(a)
.
请注意,即使没有 const
,像 d = a
这样的代码也会 编译,因为 a
不是 r-值。但是,它仍然不是一个合适的赋值运算符。
下面的代码编译没有问题
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&
使没有 const
的 operator=
不是正确的赋值运算符。它必须是 operator=(const MyClass&)
(或 operator=(MyClass)
但不要这样做,除非你知道自己在做什么,复制和交换...)。
否则,您的代码 d = MyClass(a)
无法编译,因为非常量引用不会绑定到临时(r 值),例如 MyClass(a)
.
请注意,即使没有 const
,像 d = a
这样的代码也会 编译,因为 a
不是 r-值。但是,它仍然不是一个合适的赋值运算符。