关闭

More Effective C++之20

658人阅读 评论(0) 收藏 举报
条款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则不能。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:611920次
    • 积分:9781
    • 等级:
    • 排名:第1777名
    • 原创:340篇
    • 转载:141篇
    • 译文:0篇
    • 评论:69条
    最新评论