类模板实例化

       只有当代码中使用了类模板的一个实例名字,并且上下文环境要求必须存在类定义时,这个类模板才被实例化。并不是每次使用一个类都要求知道该类的定义。例如,如果我们只是声明一个类的指针和引用,就没有必要知道类的定义。例如:

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类对象的大小,所以为了计算,类模板的被实例化了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值