当我们通过返回引用赋值时,在内部 1 和 2 究竟发生了什么?
Class A
{
A& operator= (const A &ax)
{
return *this;
}
}
int main()
{
A a;
A b;
b = a; // -------------- 1
A c = a; // ----------- 2
}
// ---------------------------------------------------------------
下面(分配的返回值)会发生什么区别?
:Class A
{
A operator= (const A &ax)
{
return *this;
}
}
int main()
{
A a;
A b;
b = a; // -------------- 3
A c = a; // ----------- 4
}
还有一个主要错误,因为operator=
私有的并且代码格式不正确,但这可以通过添加public:
访问修饰符来纠正。
operator=
是从存储到变量的对象调用b
因此此赋值变体根本不应执行赋值。
#include <iostream>
class A
{
public:
float a1;
A& operator= (const A &ax)
{
return *this;
}
};
int main()
{
A a;
a.a1 = 3;
A b;
b.a1 = 5;
b = a; // -------------- 1
std::cout << b.a1; // outputs 5
A c = a;
std::cout << c.a1; // outputs 3
}
该行
A c = a;
称为初始化并且不使用operator=
,而是使用(由编译器生成)复制构造函数,该构造函数执行对象的浅拷贝。
您的错误是成员运算符=旨在将其参数的值分配给this
。operator=
返回赋值结果,可用于链接:a=b=c;
A& A::operator= (const A &right)
相当于
A& operator= (A &left, const A &right)