template、exception handling(EH)、runtime type identification(RTTI)
- template的声明。基本来说就是当你声明一个template class、template class member function等等时,会发生什么事情。
- 如何“实例化”class object、inline nonmember 以及 member template functions。这些事“每一个编译单位都会拥有一份实例”的东西。
如何“实例化”nonmember、member template functions以及static template class members。这些都是“每一个可执行文件中只需要一份实例”的东西。这也就是一般而言template所带来的问题。
如果我们定义一个指针,指向特定的实例,
Point< float >* ptr=0;
一个指向class object的指针,本身并不是一个class object,编译器不需要知道与该class有关的任何members的数据或object布局数据。
const Point< float >& ref=0;
真正的语意会被扩展为:
//内部扩展
Point< float > temporary( float(0));
const Point< float >& ref=0;
因为reference并不是无物(no object)的代名词。0被视为整数,必须被转换为以下类型的一个对象。Point< float >。如果没有转换的可能,这个定义就是错误的,会在编译时被挑出来。
7.2异常处理
处理资源管理问题,将资源(堆分配的,或者锁)需求封装于一个 class object 体内,并由 destructor 来释放资源。
7.3执行期类型识别
dynamic_cast运算符可以在执行期决定真正的类型。
typeid运算符传回一个const reference,类型为type_info>