溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++模板的別名和默認(rèn)參數(shù)是什么

發(fā)布時(shí)間:2022-10-19 17:22:50 來(lái)源:億速云 閱讀:130 作者:iii 欄目:編程語(yǔ)言

這篇文章主要介紹“C++模板的別名和默認(rèn)參數(shù)是什么”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“C++模板的別名和默認(rèn)參數(shù)是什么”文章能幫助大家解決問(wèn)題。

右尖括號(hào)>改進(jì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;
}

函數(shù)模板的默認(rèn)模板參數(shù)

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)。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

c++
AI