template:
template 的二个问题:
1. template 的声明。当编译器看到一个template 声明时,编译器什么反应都没有。一切都不可用,只有通过template 的某个实体来存取或操作。
2. template 的具现。
point < float > fpoint;//产生一份实体与point class 的float instantiation 在程序中产生关联。
point < float > *ptr = 0;//程序什么也没有发生,因为一个指向class object 的指针,本身不是一个class object。不需要具现一个float 实体。
point < float > &ref = 0;//会具现出一个“point 的float 实体”,他的真正语意是:
point < float > temporary ( float ( 0 ) );
const point < float > &ref = temporary;
因为reference 并不是无物的代名词。0被视为整数,必须被转换为类型为point < float > 的一个对象。如果没有转换的可能,这个定义就是错误的,会在编译时被挑出来。
c++ standard 让使用者来主导“具现”规则,有两个主要原因: