条款24:理解虚拟函数、多继承、虚基类和RTTI所需的代价 此文包含一些图片,无法贴到文档区,所以我把word文档压成zip文件放在了文件交流区,请下载阅读, C++编译器们必须实现语言的每一
条款22:考虑用运算符的赋值形式(op=)取代其单独形式(op) 大多数程序员认为如果他们能这样写代码: x = x + y; x = x - y;
条款21:通过重载避免隐式类型转换 以下是一段代码,如果没有什么不寻常的原因,实在看不出什么东西: class UPInt {
条款20:协助完成返回值优化 一个返回对象的函数很难有较高的效率,因为传值返回会导致调用对象内的构造和析构函数(参见条款19),这种调用是不能避免的。问题很简单:一个函数要么为了保证正确的行为而返
条款19:理解临时对象的来源 当程序员之间进行交谈时,他们经常把仅仅需要一小段时间的变量称为临时变量。例如在下面这段swap(交换)例程里: template<class T>
条款15:了解异常处理的系统开销 为了在运行时处理异常,程序要记录大量的信息。无论执行到什么地方,程序都必须能够识别出如果在此处抛出异常的话,将要被释放哪一个对象;程序必须知道每一个入口点,以便从
条款14:审慎使用异常规格(exception specifications) 毫无疑问,异常规格是一个引人注目的特性。它使得代码更容易理解,因为它明确地描述了一个函数可以抛出什么样的异常。但是它
条款12:理解“抛出一个异常”与“传递一个参数”或“调用一个虚函数”间的差异 从语法上看,在函数里声明参数与在catch子句中声明参数几乎没有什么差别: class Widget { ..
条款11:禁止异常信息(exceptions)传递到析构函数外 在有两种情况下会调用析构函数。第一种是在正常情况下删除一个对象,例如对象超出了作用域或被显式地delete。第二种是异常传递的堆栈辗
异常 C++新增的异常(exception)机制改变了某些事情,这种改变是深刻的,彻底的,可能是令人不舒服的。例如使用未经处理的或原始的指针变得很危险。资源泄漏的可能性增加了。写出具有你希望的行为