用C 11語法改進模版細節

2021-08-16 08:45:02 字數 1177 閱讀 7367

早期的c++版本在模板中不支援連續的兩個尖括號。mingw中編譯報錯,vs中好像沒發現這問題。如下**

template t>

struct foo

;templatet>

class a ;

foo>::type x; //error 編譯出錯 「>>」被當成操作符處理了,右移操作,二義性

foo>::type x; //ok 注意空格

//c++11編譯器解決了上述問題,但也要注意與老版本不相容的例子

template t> struct foo ;

foo < 100 >> 2 > x;//err 二義性

foo<(100 >> 2)> x;//ok

從c++11開始可以用關鍵字using進行型別或模版別名宣告

typedef

unsigned

int uint_t;

using uint_t = unsigned

int;

typedef

std::map

map_int_t;

using map_int_t = std::map

; //效果等價,語法不同,更簡潔

typedef

void(*pfunc)(int, int);

using pfunc = void(*)(int, int);

//c++98/03

//定義

template

struct func_t

;//使用

func_t::type xx_1;

//c++11

//定義

template

using func_t = void(*)(t, t);

//使用

func_t xx2;

template

void func(void) {} //c++ 98/03 : err c++11:ok

template

struct identify

;template

void func(typename identify::type val, t = 0)

int main(void)

c 11 模板的細節改進

c 11改進了編譯器的解析規則,盡可能的將多個右尖括號 解析為模板引數結束符,方便編寫模板相關的 1.模板的右尖括號 2.模板的別名 之前的c 使用 typedef 來為型別指定別名,在c 11中,可以使用using 來指定別名。typedef std map std string,int map ...

C 11 模板的改進

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

C 11語法甜點

c 11中引入了許多簡化程式設計工作的語法上的新特性,我們暫且美其名曰 語法甜點 下面一一進行介紹。語法甜點1 序列for迴圈 序列for迴圈是一種簡化的for迴圈,可用於遍歷一組序列,包括各種容器 string 陣列 初始化列表以及由begin和end函式定義的序列。示例 如下 1 vectorv...