您好,登錄后才能下訂單哦!
這篇文章主要介紹“C++模板的別名和默認(rèn)參數(shù)是什么”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“C++模板的別名和默認(rèn)參數(shù)是什么”文章能幫助大家解決問(wèn)題。
在C++98/03的泛型編程中,模板實(shí)例化有一個(gè)很繁瑣的地方,就是連續(xù)兩個(gè)右尖括號(hào)(>>)會(huì)被編譯解釋成右移操作符,而不是模板參數(shù)表的形式,需要一個(gè)空格進(jìn)行分割,以避免發(fā)生編譯時(shí)的錯(cuò)誤。
template <int i> class X{}; template <class T> class Y{}; int main() { Y<X<1> > x1; // ok, 編譯成功 Y<X<2>> x2; // err, 編譯失敗 return 0; };
在實(shí)例化模板時(shí)會(huì)出現(xiàn)連續(xù)兩個(gè)右尖括號(hào),同樣static_cast、dynamic_cast、reinterpret_cast、const_cast表達(dá)式轉(zhuǎn)換時(shí)也會(huì)遇到相同的情況。C++98標(biāo)準(zhǔn)是讓程序員在>>之間填上一個(gè)空格,在C++11中,這種限制被取消了。在C++11標(biāo)準(zhǔn)中,要求編譯器對(duì)模板的右尖括號(hào)做單獨(dú)處理,使編譯器能夠正確判斷出”>>”是一個(gè)右移操作符還是模板參數(shù)表的結(jié)束標(biāo)記。
#include <iostream> #include <type_traits> //std::is_same using namespace std; using uint = unsigned int; typedef unsigned int UINT; using sint = int; int main() { //std::is_same 判斷類型是否一致 //這個(gè)結(jié)構(gòu)體作用很簡(jiǎn)單,就是兩個(gè)一樣的類型會(huì)返回true cout << is_same<uint, UINT>::value << endl; // 1 return 0; }
C++11之前,類模板是支持默認(rèn)的模板參數(shù),卻不支持函數(shù)模板的默認(rèn)模板參數(shù):
//1、普通函數(shù)帶默認(rèn)參數(shù),c++98 編譯通過(guò),c++11 編譯通過(guò) void DefParm(int m = 3) {} //2、類模板是支持默認(rèn)的模板參數(shù),c++98 編譯通過(guò),c++11 編譯通過(guò) template <typename T = int> class DefClass {}; //3、函數(shù)模板的默認(rèn)模板參數(shù), c++98 - 編譯失敗,c++11 - 編譯通過(guò) template <typename T = int> void
類模板的默認(rèn)模板參數(shù)必須從右往左定義,數(shù)模板的默認(rèn)模板參數(shù)則沒(méi)這個(gè)限定:
template<class T1, class T2 = int> class DefClass1; template<class T1 = int, class T2> class DefClass2; // 無(wú)法通過(guò)編譯 template<class T, int i = 0> class DefClass3; template<int i = 0, class T> class DefClass4; // 無(wú)法通過(guò)編譯 template<class T1 = int, class T2> void DefFunc1(T1 a, T2 b); template<int i = 0, class T> void
關(guān)于“C++模板的別名和默認(rèn)參數(shù)是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。