詳解c++11新特性之模板的改進(jìn)
C++11關(guān)于模板有一些細(xì)節(jié)的改進(jìn):
- 模板的右尖括號
- 模板的別名
- 函數(shù)模板的默認(rèn)模板參數(shù)
模板的右尖括號
C++11之前是不允許兩個(gè)右尖括號出現(xiàn)的,會(huì)被認(rèn)為是右移操作符,所以需要中間加個(gè)空格進(jìn)行分割,避免發(fā)生編譯錯(cuò)誤。
int main() {
std::vector<std::vector<int>> a; // error
std::vector<std::vector<int> > b; // ok
}
這個(gè)我之前都不知道,我開始學(xué)編程的時(shí)候就已經(jīng)是C++11的時(shí)代啦。
模板的別名
C++11引入了using,可以輕松的定義別名,而不是使用繁瑣的typedef。
typedef std::vector<std::vector<int>> vvi; // before c++11 using vvi = std::vector<std::vector<int>>; // c++11
使用using明顯簡潔并且易讀,大家可能之前也見過使用typedef定義函數(shù)指針之類的操作,那爛代碼我就不列出來了,反正我是看不懂也不想看...以后都可以使用using,額還是列出來吧。
typedef void (*func)(int, int); // 啥玩意,看不懂 using func = void (*)(int, int); // 起碼比typedef容易看的懂吧
上面的代碼使用using起碼比typedef容易看的懂一些吧,但是我還是看不懂,因?yàn)槲覐膩聿挥眠@種來表示函數(shù)指針,用std::function()、std::bind()、std::placeholder()、lambda表達(dá)式它不香嗎。
函數(shù)模板的默認(rèn)模板參數(shù)
C++11之前只有類模板支持默認(rèn)模板參數(shù),函數(shù)模板是不支持默認(rèn)模板參數(shù)的,C++11后都支持。
template <typename T, typename U=int>
class A {
T value;
};
template <typename T=int, typename U> // error
class A {
T value;
};
類模板的默認(rèn)模板參數(shù)必須從右往左定義,而函數(shù)模板則沒有這個(gè)限制。
template <typename R, typename U=int>
R func1(U val) {
return val;
}
template <typename R=int, typename U>
R func2(U val) {
return val;
}
int main() {
cout << func1<int, double>(99.9) << endl; // 99
cout << func1<double, double>(99.9) << endl; // 99.9
cout << func1<double>(99.9) << endl; // 99.9
cout << func1<int>(99.9) << endl; // 99
cout << func2<int, double>(99.9) << endl; // 99
cout << func1<double, double>(99.9) << endl; // 99.9
cout << func2<double>(99.9) << endl; // 99.9
cout << func2<int>(99.9) << endl; // 99
return 0;
}
對于函數(shù)模板,參數(shù)的填充順序是從左到右的。
關(guān)于C++11對于模板的改進(jìn)就講到這里,請繼續(xù)關(guān)注~
參考資料
《深入應(yīng)用C++11:代碼優(yōu)化與工程級應(yīng)用》
https://blog.csdn.net/tennysonsky/article/details/77817027
到此這篇關(guān)于c++11新特性之模板的改進(jìn)的文章就介紹到這了,更多相關(guān)c++11新特性之模板的改進(jìn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt實(shí)現(xiàn)驗(yàn)證碼相關(guān)功能的代碼示例
驗(yàn)證碼的原理基于人類視覺和計(jì)算機(jī)視覺的差異性,通過給用戶顯示一些難以被機(jī)器識別的圖形或文字,讓用戶進(jìn)行人機(jī)交互,確認(rèn)自己的身份,這樣可以有效保護(hù)網(wǎng)站安全,所以本給大家介紹了Qt實(shí)現(xiàn)驗(yàn)證碼相關(guān)功能的代碼示例,感興趣的朋友可以參考下2024-01-01
C++日期類(Date)實(shí)現(xiàn)的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用C++語言實(shí)現(xiàn)日期類(Date),可以實(shí)現(xiàn)確定某年某月有多少天、打印日期等功能,感興趣的可以了解一下2022-07-07
VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法匯總
這篇文章主要介紹了VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法,對于更好的了解OpenGL很有幫助,需要的朋友可以參考下2014-07-07
C++實(shí)現(xiàn)快速排序(Quicksort)算法
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)快速排序(Quicksort)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04

