这段代码是什么:
MyClass t;
t = MyClass(100);
我在我的代码中使用了类似的东西,我得到了编译错误error: no match for ‘operator=’
。我在Java中解释它,但显然它有所不同。
我的赋值运算符声明如下:
MyClass& operator=(Myclass& other)
当我将代码更改为此时,它可以正常工作:
MyClass temp(100);
t = temp;
我不能这样做:
Myclass t(100)
答案 0 :(得分:4)
你需要将rhs声明为const referece
MyClass& operator=(const Myclass& other);
当你有
时t = MyClass(100);
右侧是临时的,非const左值引用不能绑定到临时对象。
你后来的尝试
MyClass t2(100);
t = t2;
创建一个命名对象t2
,因为这是一个实际的非const左值,你的赋值运算符的参数能够绑定到它。
如果您尝试
,可以直接看到MyClass& r1 = MyClass(100); // invalid, non-const ref to temporary
const MyClass& r2 = MyClass(100); // valid, const ref to temporary
MyClass mc(100);
MyClass& r3 = mc; // valid, non-const ref can bind to a named object
// as long as the object itself isn't declared const
const MyClass& r4 = mc; // valid, you can bind a non-const ref as well
答案 1 :(得分:1)
您的赋值运算符应将const引用作为参数。因为临时MyClass(100)不能绑定到非const引用,所以无法调用当前的实现。
答案 2 :(得分:1)
那是因为在作业中
t = MyClass(100);
分配右侧的对象是临时对象,您无法引用临时对象。但是,您可以使用常量引用,因此如果您将赋值运算符定义为
MyClass& operator=(const Myclass& other)
它会起作用。
如果您使用新的C ++ 11 rvalue-reference:
,它也会起作用MyClass& operator=(Myclass&& other)
答案 3 :(得分:0)
忘了const C ++编译器应绑定右侧的const对象
MyClass的&安培; operator =(const Myclass& other);