詳解c 11新特性之模板的改進

2022-10-03 23:15:24 字數 1053 閱讀 8913

c++11關於模板有一些細節的改進:

模板的右尖括號

c++11之前是不允許兩個右尖括號出現的,會被認為是右移操作符,所以需要中間加個空格進行分割,避免發生編譯錯誤。

int main()

這個我之前都不知道,我開始學程式設計的時候就已經是c++11的時代啦。

模板的別名

c++11引入了using,可以輕鬆的定義別名,而不是使用繁瑣的typedef。

typedef std::vector<:vector>> vvi; // before c++11

using vvi = std::vector<:vector>>; // c++11

使用using明顯簡潔並且易讀,大家可能之前也見過使用typedef定義函式指標之類的操作,那爛**我就不列出來了,反正我是看不懂也不想看...以後都可以使用using,額還是列出來吧。

typedef void (*func)(int, int); // 啥玩意,看不懂

using func = void (*)(int, int); // 起碼比typedef容易看的懂吧

上面的**使用using起碼比typedef容易看的懂一些吧,但是我還是看不懂,因為我從來不用這種來表示函式指標,用std::function()、std::bind()、std::表示式它不香嗎。

函式模板的預設模板引數

c++11之前只有類模板支援預設模板引數,函式模板是不支援預設模板引數的,c++11後都支援。

template

class a ;

template // error

class a ;

類模板的預設模板引數必須從右往左定義,而函式模板則沒有這個限制。

template

r func1(u val)

template

r func2(u val)

ixoxtxcnt main()

對於函式模板,引數的填充順序是從左到右的。

關於c++11對於模板的改進就講到這裡,請繼續關注~

參考資料

《深入應用c++11:**優化與工程級應用》

C 11新特性之模板改進 別名

include using namespace std template typename t class foo foo private t foo template typename u classa a private u a intmain 如上示例 1 在c 98 03標準中,巢狀模板的右...

C 11 新特性 模板別名

豆子 2012年5月22日 c 參考文章 2002 年,iso c 標準化組織就已經提出了模板別名的概念。不過那時候還是叫做 typedef template。在接下來的幾年中,以 gabriel dos reis 和 bjarne stroustrup 為代表的開發者發展了這個想法,最終,我們在 ...

C 11 模板的改進

在c 98 03的泛型程式設計中,模板例項化有乙個很繁瑣的地方,就是連續兩個右尖括號 會被編譯解釋成右移操作符,而不是模板參數列的形式,需要乙個空格進行分割,以避免發生編譯時的錯誤。template class x template class y int main 在例項化模板時會出現連續兩個右尖...