typedef和typename的區別

2021-06-22 23:27:39 字數 857 閱讀 1197

typename指示乙個型別名,而非定義乙個型別,以下宣告了乙個seq::iterator型別的變數itr,其中seq是乙個模板例項化時才知道的類:

typename seq::iterator itr;

如果沒有typename指示,seq::iterator會被認為是seq的靜態變數,而不是型別名。

typename關鍵字不會定義乙個型別,如果你想定義乙個新型別的話,你必須這樣:

typedef typename seq::iterator itr;

相信學習c++的人對class這個關鍵字都非常明白,class用於定義類,在模板引入c++後,最初定義模板的方法為:       template...... 

在這裡class關鍵字表明t是乙個型別,後來為了避免class在這兩個地方的使用可能給人帶來混淆,所以引入了typename這個關鍵字,它的作用同class一樣表明後面的符號為乙個型別,這樣在定義模板的時候就可以使用下面的方式了:       template......

在模板定義語法中關鍵字class與typename的作用完全一樣。

typename難道僅僅在模板定義中起作用嗎?其實不是這樣,typename另外乙個作用為:使用巢狀依賴型別(nested  depended name),如下所示:

class myarray     

template

void mymethod( t myarr ) 

這個時候typename的作用就是告訴c++編譯器,typename後面的字串為乙個型別名稱,而不是成員函式或者成員變數,這個時候如果前面沒有typename,編譯器沒有任何辦法知道t::lengthtype是乙個型別還是乙個成員名稱(靜態資料成員或者靜態函式),所以編譯不能夠通過。

typedef和typedef struct的區別

今天做的專案中,看師兄寫的 有typedef struct,可是自己之前一直都不是特別了解這個是具體代表什麼意思,因為平時很少習慣用這個,一般都是直接就宣告類了,所以上網查了下,現在有所明朗了。分三塊來講述 1 首先 在c中定義乙個結構體型別要用typedef typedef struct stud...

結構體和typedef

一 使用結構的乙個優點就是 可以使用簡單的賦值語句在同型別的結構之間複製資訊 first second first.x second.x first.y second.y 二 structlist 注意這個分號不能少 structlistlist1,list2 注意這個分號不能少 structlis...

Typedef和define的區別

typedef和define都可以用來給物件取乙個別名,但是兩者卻有著很大不同。1 首先,二者執行時間不同 關鍵字typedef在編譯階段有效,由於是在編譯階段,因此typedef有型別檢查的功能。define則是巨集定義,發生在預處理階段,也就是編譯之前,它只進行簡單而機械的字串替換,而不進行任何...