c++中typename和class的區(qū)別介紹
相信學(xué)習(xí)C++的人對(duì)class這個(gè)關(guān)鍵字都非常明白,class用于定義類(lèi)。在模板引入c++后,最初定義模板的方法為: template<class T>......
在這里class關(guān)鍵字表明T是一個(gè)類(lèi)型,后來(lái)為了避免class在這兩個(gè)地方的使用可能給人帶來(lái)混淆,所以引入了typename這個(gè)關(guān)鍵字。它的作用同
class一樣表明后面的符號(hào)為一個(gè)類(lèi)型,這樣在定義模板的時(shí)候就可以使用下面的方式了: template<typename T>......
在模板定義語(yǔ)法中關(guān)鍵字class與typename的作用完全一樣。
typename難道僅僅在模板定義中起作用嗎?其實(shí)不是這樣,typename另外一個(gè)作用為:使用嵌套依賴(lài)類(lèi)型(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;
}
這個(gè)時(shí)候typename的作用就是告訴c++編譯器,typename后面的字符串為一個(gè)類(lèi)型名稱(chēng),而不是成員函數(shù)或者成員變量,這個(gè)時(shí)候如果前面沒(méi)有typename,編譯器沒(méi)有任何辦法知道T::LengthType是一個(gè)類(lèi)型還是一個(gè)成員名稱(chēng)(靜態(tài)數(shù)據(jù)成員或者靜態(tài)函數(shù)),所以編譯不能夠通過(guò)。
相關(guān)文章
C語(yǔ)言中的運(yùn)算符和結(jié)合性問(wèn)題
這篇文章主要介紹了C語(yǔ)言中的運(yùn)算符和結(jié)合性問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
C++實(shí)現(xiàn)從數(shù)組中同時(shí)取出最大最小元素算法示例
這篇文章主要介紹了C++實(shí)現(xiàn)從數(shù)組中同時(shí)取出最大最小元素算法,結(jié)合具體實(shí)例形式分析了C++通過(guò)數(shù)組的遍歷、排序獲取最大與最小元素的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
簡(jiǎn)單了解C++常見(jiàn)編程問(wèn)題解決方案
這篇文章主要介紹了C++常見(jiàn)編程問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
詳解如何配置CLion作為Qt5開(kāi)發(fā)環(huán)境的方法
這篇文章主要介紹了詳解如何配置CLion作為Qt5開(kāi)發(fā)環(huán)境的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
c++項(xiàng)目構(gòu)成從cmake使用基礎(chǔ)詳解
這篇文章主要為大家介紹了c++項(xiàng)目構(gòu)成,從cmake使用基礎(chǔ)開(kāi)始為大家講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
關(guān)于C++STL string類(lèi)的介紹及模擬實(shí)現(xiàn)
這篇文章主要介紹了關(guān)于C++STL string類(lèi)的介紹及模擬實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下面具體的文章內(nèi)容2021-09-09

