typename與class的區別

2021-09-20 01:41:46 字數 976 閱讀 9432

我們都知道,在stl中基本上都使用了模板類的宣告,即template。在模板類的宣告中,我們有兩種方式:

template

template

在這裡,class和typename是相同的。也就是說,在宣告乙個template type parameter(模板型別引數)的時候,class和typename意味著

完全相同的東西。

但是,在c++中,有的時候必須要使用typename.下面我們列舉下面乙個例子。

關鍵字typename被用來作為型別之前的識別符號號。

template t>

class myclass;

在這裡,typename指出subtype是class t中定義的乙個類別,因此ptr是乙個指向t::subtype型別的指標。如果沒有關鍵字typename,subtype會被當成乙個static成員,於是

t

::subtype * ptr

會被解釋為型別t內的數值subtype與ptr的乘積。

subtype成為乙個型別的條件是,任何乙個用來取代t的型別,其內部必須有乙個內部型別(inner type)subtype的定義。例如,將型別q當作template的引數。

myclass x;

必要條件是型別q有如下的內部型別定義:

class q;
因此,myclass的ptr成員應該變成乙個指向int型別的指標,子型別subtype也可以成為抽象

資料型別(例如,class):

class q;
注意,如果要把乙個template中的某個識別符號號指定為一種型別,就算是意圖顯而易見,關鍵字typename也是不能省略的,因此c++的一般規則是,除了使用typename修飾之外,template內的任何識別符號號都被視為乙個值而不是乙個型別。

C 模板class與typename的區別

模板中,class與typename的差別 在很多人看來,兩者沒有上門區別,但有的時候,必須使用typename,如下 template class myiter myiter t p 0 ptr p template typename t1 value type testfun t1 ct1,t2...

C 中typename和class的區別

在c template中很多地方都用到了typename與class這兩個關鍵字,而且好像可以替換,是不是這兩個關鍵字完全一樣呢?相信學習c 的人對class這個關鍵字都非常明白,class用於定義類,在模板引入c 後,最初定義模板的方法為 template.在這裡class關鍵字表明t是乙個型別,...

定義模板時typename和class的區別

在c template中很多地方都用到了typename與class這兩個關鍵字,而且好像可以替換,是不是這兩個關鍵字完全一樣呢?相信學習c 的人對class這個關鍵字都非常明白,class用於定義類,在模板引入c 後,最初定義模板的方法為 template.在這裡class關鍵字表明t是乙個型別,...