More Effective C++之20

原创 2006年06月15日 13:47:00
条款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则不能。

返回值优化(More Effective C++_20(效率))

我们知道一个返回对象的函数很难有很高的效率,因为传值会调用对象内的构造函数和析构函数;而一些函数必须要返回对象,这是难以避免的,所以,我们关心的重点,并不是去消除返回对象,而是怎么减少返回对象所用的开...

《More Effective C++》重点摘要二:操作符

对定制的“类型转换函数”警觉。两种函数允许编译器执行类型转换:1)单变量constructors;2)隐式类型转换操作符。第一种函数可以是明确只有一个单变量的constructor,也可以是拥有除第一...

more effective c++之Item M1:指针与引用的区别

1.参数为引用不用判断为空,指针需要判断空指针; 2.有些函数返回应用比返回指针从语法和形式上更好,例如重载operator [ ]。 指针与引用看上去完全不同(指针用操作符“*”和“->...

More Effective C++读书笔记(五)

技术 条款25:将构造函数和非成员函数虚拟化 1.虚拟构造函数是指能够根据输入给它的数据的不同而建立不同类型的对象,比如从磁盘读取对象信息。 2.被派生类重定义的虚拟函数不用必须与基类的虚拟函数...
  • necrazy
  • necrazy
  • 2013年11月08日 10:11
  • 814

《More Effective C++》7:千万不要重载 &&, ||, 和 ,操作符

《More Effective C++》Rule7:千万不要重载 &&, ||, 和 ,操作符

看了下More Effective C++,做了点小结

今天主要是学习More Effective C++ 1) 指针和引用的使用 指针:在对象为空时;不同的时刻指向不同的对象时 引用:总指向一个对象,并且一旦指向这个对象就不再改变时; 当时重载某个...

前置和后置操作符的区别(More Effective_C++_6(运算符))

++和–的原理类似,下面仅++操作符来分析前置和后置的区别先看一段代码:class A{ pubilc: A& operator++();//前置++ const A& operator++(int)...

【more effective c++读书笔记】【第5章】技术(2)——限制某个class所能产生的对象数量

一、允许零个对象 每当产生一个对象时会有一个构造函数被调用,因此阻止某个类产出对象的最简单方法就是将该类的构造函数声明为private。 例子: class CantBeInstantiated{ p...

More Effective C++ ——01_指针与引用的区别

条款一:指针与引用的区别  指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。   问题:你如何决定在什么...

More Effective C++----(7)不要重载"&&"、"||"、","

Item M7:不要重载"&&"、"||"、"," 与C一样,C++使用布尔表达式短路求值法(short-circuit evaluation)。这表示一旦确定了布尔表达式的真假值,即使还有部分表...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:More Effective C++之20
举报原因:
原因补充:

(最多只允许输入30个字)