C++中真正所谓的临时对象是不可见的--不会在源代码中出现。
发生于两种情况:1、隐式类型转换;2、当函数返回对象的时候;
只有当对象以by value 方式传递,或是当对象被传递给一个reference to const 参数时,这些转换才会发生。如果对象被传递给一个reference to non const参数,并不会发生此类转换。
C++禁止为non-const-reference参数产生临时对象。
返回值优化:
让编译器消除临时对象的成本。让函数返回所谓的constructor arguments以取代对象。
const Rational operator*( constr Rational& lhs, const Rational& rhs)
{
return Rational( lhs.numerator()* rhs.numerator, lhs.denominator()*rhs.denominator());
}
More Effective C++----19th,20th