#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標準中,巢狀模板的右尖括號中間必須加空格(不加會與右移》操作符產生二義性);
2、在c++11標準中則對此進行了優化,無需在巢狀模板的右尖括號中間加空格。
template
<
typename n>
struct foo
;int
main
(void
)
如上示例:
1、在c++98/03標準中對於foo<100 >> 2> 會正常編譯;
2、在c++11標準中則報錯,解決方法:foo<(100 >> 2)>.
1、在c++98/03標準中可以使用typedef;
2、在c++11標準中新增了using方式。
typedef
unsigned
int uint_t;
//<=>
using uint_t =
unsigned
int;
void
func
(unsigned
int)
;void
func
(uint_t)
;// error c2084: 函式「void func(unsigned int)」已有主體
typedef mapint> map_int_t;
typedef map map_str_t;
如上示例中,map的key都是string型別,要求將其第二個引數模板化:
//在c++98/03標準中可使用外敷模板方式實現
template
<
typename t>
struct map_str
;//在c++11標準中則直接使用using實現
template
<
typename t>
using map_str = map
;
如上示例,可見using定義模板比外敷模板更簡易易讀。
1、typedef 無法重定義乙個模板;
2、c++11引入using來重定義乙個模板;
3、using包含了typedef的所有別名定義;
4、using 語法和 typedef 一樣,並不會創造新的型別。
在 c++98/03 中,類模板可以有預設的模板引數,但函式模板不行;
在 c++11中,函式模板支援預設模板引數,當自動推導生效時,預設模板引數會被直接忽略。
#include
template
<
typename t =
double
,typename u>
t func
(u u)
intmain()
C 11 新特性 模板別名
豆子 2012年5月22日 c 參考文章 2002 年,iso c 標準化組織就已經提出了模板別名的概念。不過那時候還是叫做 typedef template。在接下來的幾年中,以 gabriel dos reis 和 bjarne stroustrup 為代表的開發者發展了這個想法,最終,我們在 ...
詳解c 11新特性之模板的改進
c 11關於模板有一些細節的改進 模板的右尖括號 c 11之前是不允許兩個右尖括號出現的,會被認為是右移操作符,所以需要中間加個空格進行分割,避免發生編譯錯誤。int main 這個我之前都不知道,我開始學程式設計的時候就已經是c 11的時代啦。模板的別名 c 11引入了using,可以輕鬆的定義別...
c 11模板別名using
對於冗長或複雜的識別符號,如果能夠建立其別名將很方便。以前c 為此提供了typedef typedef std vector iterator ittype c 11提供了另一種建立別名的語法 using using ittype std vector iterator ittype 差別在於新語法...