对象返回类型的选择
这里的返回类型以Vector类对象为例
4种:对象引用,const对象引用,对象,const对象
- Vector &
返回对象的引用,不需要调用复制构造函数,返回引用效率更高
修改返回值
赋值运算符重载,<<运算符重载属于这一类 - const Vector &
不修改返回对象的值 - Vector
对于调用函数中的局部变量,则不应该按引用返回它,因为函数结束之后,局部变量就会被销毁,这时应该选择按值返回,调用复制构造函数,返回一个局部变量的副本,这时这种开销是无法避免的。
被重载的算数运算符属于这一类 - const Vector
用于某些情况的错误
例如 1. net= force1 + force2
2. force1 + force2 = net
在返回类型是对象的情况下都可以运行,但是2是有问题的,force1 + force2创建一个临时对象temp,语句1中temp将被复制到net,结果被保留下来,而在语句2中,结果将永远被net覆盖,而与temp的计算结果无关。
为了避免这种错误的发生,可以让Vector::operator+()的返回类型设置为const Vector,这样拷贝的临时副本将是不可修改的,语句2将被禁用,而语句1可以正常使用,可以更好地避免可能引发的错误。