只有当代码中使用了类模板的一个实例名字,并且上下文环境要求必须存在类定义时,这个类模板才被实例化。并不是每次使用一个类都要求知道该类的定义。例如,如果我们只是声明一个类的指针和引用,就没有必要知道类的定义。例如:
class Matrix ;
Matrix *pm ; //声明一个类的指针,不需要Matrix的定义
void inverse(Matrix&) ; //声明一个类的引用,不需要Matrix的定义
Matrix m ; //声明类的一个对象,需要Matrix的定义
请指出下列哪些模板实例的使用会引起模板被实例化?
template<class Type>
class Stack { };
void f1(Stack<char>) ; // (a)
class Exercise
{
// ...
Stack<double> &rsd ; // (b)
Stack<int> si ; // (c)
};
int main()
{
Stack<char> *sc ; // (d)
f1(*sc) ; // (e)
int iObj = sizeof(Stack<string>) ; // (f)
}
一一解答:
(a)、因为(a)处只是一个函数声明,类模板没有被实例化
(b)、因为这里声明的是一个引用,所以类模板没有被实例化
(c)、因为这里是定义一个类对象si,所以将类模板实例化了
(d)、因为这里声明的是一个指针,所以类模板没被实例化
(e)、sc是一个指针,这里是一个解引用操作,所以类模板被实例化了
(f)、因为sizeof会计算一个Stack类对象的大小,所以为了计算,类模板的被实例化了
1725

被折叠的 条评论
为什么被折叠?



