早期的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...