C++中如何返回指向const对象的引用
使用const引用的常见原因是旨在提高效率,但对于何时可以采用这种方式存在一些限制。如果函数返回(通过调用对象的方法或将对象作为参数)传递给它的对象,可以通过返回引用来提高其效率。例如,假设要编写函数 Max(0),它返回两个 Vector 对象中较大的一个,其中 Vector 是第 11章开发的一个类。该函数将以下面的方式被使用:
Vector force1(50, 60);
Vector force2(10, 70);
Vector max;
max = Max(force1, force2)
下面两种实现都是可行的:
// version 1
Vector Max(const Vector & v1,const Vector & v2)
{
if(v1.magval()>v2.magval())
return v1;
else
return v2;
}
// version 2
const Vector & Max(const Vector & v1,const Vector & v2)
{
if(v1.magval() > v2.magval())
return v1;
else
return v2;
}
这里有三点需要说明。首先,返回对象将调用复制构造函数,而返回引用不会。因此,第二个版本所做的工作更少,效率更高。参见【0voice C++】其次,引用指向的对象应该在调用函数执行时存在。在这个例子中,引用指向force1或force2,它们都是在调用函数中定义的,因此满足这种条件。第三,v1和 v2都被声明为 const 引用,因此返回类型必须为const,这样才匹配。