一,代码形式:
class MyClass {
public:
MyClass& operator=(const MyClass& other) { //返回的是本类对象的一个引用
// 赋值操作的逻辑
return *this;
}
};
二,预备知识:
1.这样做只是一种协议,并不是强制的,不这样写同样能编译过
2.但是C++的内置类型和标准库类型例如string等都是这样写的
三,书中的说法:
书中说明:“为了实现连锁赋值,赋值操作符必须返回一个reference指向操作符的左侧实参”。
关于这句话我的理解:
有代码int x,y,z; x=y=z=15;
这代码是正确的,但是如果你有一个类,需要在类对象之间连锁赋值,就必须遵守这句书中说明。
四,测试
1.使用引用为返回值
#include <iostream>
class MyClass
{
public:
int value;
MyClass(int val = 0) : value(val)
{
}
MyClass& operator=(const MyClass& other) //使用引用为返回值
{
value = other.value;
return *this;
}
};
int main()
{
MyClass a, b, c;
a = b = c = MyClass(42);
std::cout << a.value << std::endl; // 输出: 42
std::cout << b.value << std::endl; // 输出: 42
std::cout << c.value << std::endl; // 输出: 42
return 0;
}
输出结果:a,b,c的值相同
2.采用值作为返回值:
#include <iostream>
class MyClass
{
public:
int value;
MyClass(int val = 0) : value(val)
{
}
MyClass operator=(const MyClass& other) //采用值作为返回值
{
value = other.value;
return *this;
}
};
int main()
{
MyClass a, b, c;
a = b = c = MyClass(42);
std::cout << a.value << std::endl;
std::cout << b.value << std::endl;
std::cout << c.value << std::endl;
return 0;
}
输出结果:
3.总结:
可见采用值作为返回值和引用作为返回值输出结果并没有什么区别,都能正确的在对象之间进行赋值
五,输出结果没有区别为什么要使用引用返回值?
参考文章:(https://blog.csdn.net/u014038273/article/details/75426041)
使用引用方式进行赋值速度更快,使用值赋值的方式需要创建临时对象,速度慢一点。