More Effective C++之22

原创 2006年06月18日 02:27:00
条款22:考虑以操作符复合形式(op=)取代其独身形式(op)
一般而言,操作符的复合版本比独立的版本效率要高,独立版本一般会返回一个新对象,所以要承担这个新对象带来的构造和析构成本;复合版本一般直接把数据写进左值。我们需要注意的是编译器一般会对不具名的对象进行优化,而对具名对象通常无能为力。所以对同样的实现,

template<class T> const T operator+(const T& lhs ,const T& rhs)

{
       //实现一
       return T(lhs) += rhs;
       //实现二
       T result(lhs);
       return result += rhs;
}
对实现一,也许编译器要花费一个临时对象的成本;但对于实现二,肯定要花费一个局部对象的成本;如果一定要选择一种写法,请选择第一种。而且我们在调用操作符的时候,优先调用复合形式。

[More Effective C++]条款22有关返回值优化的验证结果

转自:http://blog.sina.com.cn/s/blog_5dbb2c470100xapn.html 不知结果是否正确,有待进一步确认 (这里的验证结果是针对返回值优化的,其实和条款22本...

[More Effective C++]条款22有关返回值优化的验证结果

(这里的验证结果是针对返回值优化的,其实和条款22本身所说的,考虑以操作符复合形式(op=)取代其独身形式(op),关系不大。书生注) 在[More Effective C++]条款22的最后,...

【more effective c++读书笔记】【第1章】基础议题(1)

条款1:仔细区别pointers和references 1、pointers和references之间的区别是: a、没有所谓的null reference,一个reference必须总代表某个对...

指针和引用的区别(More Effective c++ )

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

More Effective C++----异常 & (9)使用析构函数防止资源泄漏

异常 关于C++异常的详细知识,请参考http://blog.csdn.net/qianqin_2014/article/details/51325842> C++新增的异常(exceptio...

More Effective C++----(19)理解临时对象的来源

Item M19:理解临时对象的来源 当程序员之间进行交谈时,他们经常把仅仅需要一小段时间的变量称为临时变量。例如在下面这段swap(交换)例程里: template void swap(T...

More Effective C++----技巧 & (25)将构造函数和非成员函数虚拟化

技巧 本书涉及的大多数内容都是编程的指导准则。这些准则虽是重要的,但是程序员不能单靠准则生活。有一个很早以前的卡通片叫做“菲利猫”(Felix the Cat), 菲利猫无论何时遇到困难,它都会拿...

More Effective C++----(12)理解"抛出一个异常"与"传递一个参数"或"调用一个虚函数"间的差异

Item M12:理解"抛出一个异常"与"传递一个参数"或"调用一个虚函数"间的差异 从语法上看,在函数里声明参数与在catch子句中声明参数几乎没有什么差别: class Widget {...

《More Effective C++》条款27:如何让类对象只在栈(堆)上分配空间?

昨天一个同学去网易面试C++研发,问到了这么一个问题:如何限制一个类对象只在栈(堆)上分配空间? 一般情况下,编写一个类,是可以在栈或者堆分配空间。但有些时候,你想编写一个只能在栈或者只能在堆上面分...
  • hxz_qlh
  • hxz_qlh
  • 2013年10月26日 21:27
  • 5977

more-effective-c++ 序列2 异常(第9节,如何利用局部对象管理资源)的测试示例

more effective  c++关于异常这一大节,会有一篇总体的文章(还在一点点的往下写的过程中),以比较简短的语句来描述异常这一大节的每一个小节的精髓,而整个大节会涉及很多测试,每一个测试会有...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:More Effective C++之22
举报原因:
原因补充:

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