C++模板中关键字typename与class的区别

在C++里,不管是模板函数,还是模板类,均会用关键字typename和class来指定模板类型。对于模板函数与模板类的使用请自行参考:C++ Primer中文版 。

但是为什么要用两个关键字呢,一个不就可以了吗?反正都是用来作为指定某变量的类型要在编译的时候才会被确定。

根据我查阅的资料,注释内容 typename和class的区分 与 C++箴言:理解typename的两个含义 猜测在早起模板里是使用class作为关键字,但是后来发现会导致后面介绍的问题,于是引入typename(仅是我胡乱猜测~),但是为什么不把class作为模板关键字的作用取消呢,保留typename为唯一的。下面摘自参考资料1处:

置信进修C++的人对class这个关键字都十分明确,class用于界说类。在模板引进c++后,最后界说模板的办法为: 

template<class T>......
在这里class关键字标明T是一个范例,后面为了不class在这两个地方的运用能够给人带来混淆,以是引进了typename这个关键字。它的效果同class同样标明后边的标记为一个范例,如许在界说模板的时分就能够运用下面的方法了:
template<typename T>......
在模板界说语法中关键字class与typename的效果彻底同样。typename莫非仅仅在模板界说中起效果吗?实在不是如许,typename别的一个效果为:运用嵌套依托范例(nested depended name),以下所示:
class MyArray 
{ 
public:
	typedef int LengthType;
	//.....
}

template<class T>
void MyMethod( T myarr ) 
{ 
	typedef typename T::LengthType LengthType; 
	LengthType length = myarr.GetLength; 
}

这个时候typename的作用就是告诉c++编译器,typename后面的字符串为一个类型名称,而不是成员函数或者成员变量,这个时候如果前面没有typename,编译器没有任何办法知道T::LengthType是一个类型还是一个成员名称(静态数据成员或者静态函数),所以编译不能够通过。

更多详细介绍参考资料1。


参考资料:
1、理解typename的两个含义
2、注释内容 typename和class的区分
3、C++ Primer中文版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值