溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++模板的別名和默認參數是什么

發布時間:2022-10-19 17:22:50 來源:億速云 閱讀:184 作者:iii 欄目:編程語言

這篇文章主要介紹“C++模板的別名和默認參數是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“C++模板的別名和默認參數是什么”文章能幫助大家解決問題。

右尖括號>改進

在C++98/03的泛型編程中,模板實例化有一個很繁瑣的地方,就是連續兩個右尖括號(>>)會被編譯解釋成右移操作符,而不是模板參數表的形式,需要一個空格進行分割,以避免發生編譯時的錯誤。

template <int i> class X{};
template <class T> class Y{};

int main()
{
    Y<X<1> > x1;    // ok, 編譯成功
    Y<X<2>> x2;     // err, 編譯失敗

    return 0;
};

在實例化模板時會出現連續兩個右尖括號,同樣static_cast、dynamic_cast、reinterpret_cast、const_cast表達式轉換時也會遇到相同的情況。C++98標準是讓程序員在>>之間填上一個空格,在C++11中,這種限制被取消了。在C++11標準中,要求編譯器對模板的右尖括號做單獨處理,使編譯器能夠正確判斷出”>>”是一個右移操作符還是模板參數表的結束標記。

模板的別名

#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 判斷類型是否一致
    //這個結構體作用很簡單,就是兩個一樣的類型會返回true
    cout << is_same<uint, UINT>::value << endl; // 1

    return 0;
}

函數模板的默認模板參數

C++11之前,類模板是支持默認的模板參數,卻不支持函數模板的默認模板參數:

//1、普通函數帶默認參數,c++98 編譯通過,c++11 編譯通過
void DefParm(int m = 3) {}

//2、類模板是支持默認的模板參數,c++98 編譯通過,c++11 編譯通過
template <typename T = int>
class DefClass {};

//3、函數模板的默認模板參數, c++98 - 編譯失敗,c++11 - 編譯通過
template <typename T = int> void

類模板的默認模板參數必須從右往左定義,數模板的默認模板參數則沒這個限定:

template<class T1, class T2 = int> class DefClass1;
template<class T1 = int, class T2> class DefClass2;   // 無法通過編譯

template<class T, int i = 0> class DefClass3;
template<int i = 0, class T> class DefClass4;         // 無法通過編譯

template<class T1 = int, class T2> void DefFunc1(T1 a, T2 b);
template<int i = 0, class T> void

關于“C++模板的別名和默認參數是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女