条款20:协助完成[返回值优化(RVO)]
考虑以下的代码:
class Rational
{
……
inline const Rational operator* (const Rational& lhs, const Rational& rhs)
{
return Rational (lhs.numerator()*rhs.numerator(),lhs.denominator()*rhs. denominator ());
}
……
}
这段代码的优点是什么?它把operator*的调用代价降到最低。一般调用如下:
Rational a = 10;
Rational b(1,2);
Rational c = a*b;
那么生成了多少个临时对象?答案是,对一般编译器,这个代价是0。编译器可以做到的优化是将lhs.numerator()*rhs.numerator(),lhs.denominator()*rhs. denominator ()的参数放到c的构造函数中去。记住const能引起这个优化,非const则不能。