模板的閉符之間不需要空格:vector> 等同於 vector>
nullptr取代0或者null
以auto完成型別自動推導
一致性初始化與初值列;使用大括號進行初始化動作,如: int values vectorv;初值列如:int j{}--j is initialized by 0; int*p{}--q is initialized by nullptr;
range-based for ; 如 for(auto i: list/range/array/collection)
move/rvalue reference
用以避免非必要拷貝(copy)和臨時物件(temporary)
std::move() 意味著「呼叫move()語義(若有提供的話),否則呼叫copy語義」
c++標準庫的class保證了,在一次move之後,物件處於有效但不確定的狀態。也就是說,你可以在move之後對它賦予新值,但當前值是不確定的。stl容器則保證了,被搬移內容者,搬移後其值為空
新式的字串字面常量。raw string literal--r"\\\n"; 編碼的(encoded)string literal--u8"lsdkf" u「dd」 u"kk" l"hello"
noexcept--給編譯器更大的優化空間。然而,並不是加上noexcept就能提高效率,步子邁大了也容易扯著蛋。防止異常擴散
用來指明莫哥函式無法或不打算丟擲異常
constexpr--讓表示式核定於編譯期
constexpr int square(int x)
float a[square(9)]; // ok since c++11 : a has 81 elements
------------
std::numeric_limits::max() == int_max
嶄新的template特性
可以接受個數不定之template實參--variadic template;
void print()
templatevoid print(const t& first,const types&... args)
decltype--可以讓編譯器找出表示式型別
其實就是常被要求的typeof的特性表現。只不過原有的typeof缺乏一致性又不安全,c++11才引入這麼乙個關鍵字
用途 宣告返回值型別
templatedecltype(x+y) add(t1 x,t2 y)
---------------
templateauto add(t1 x,t2 y)->decltype(x+y)
在metaprogramming(元程式設計)或用來傳遞乙個lambda型別
class person
auto hash = (const person& p)
auto eq = (const person& p1,const person& p2)
unordered_setpset(10,hash,eq);
新的函式宣告語法
templatedecltype(x+y) add(t1 x,t2 y);
templateauto add(t1 x,t2 y) -> decltype(x+y);
C 11新特性學習
lambda表示式用於建立匿名的函式物件,語法為 函式可訪問的的外部變數 函式引數 返回值型別 如 int a 1,b 2 int c b int x int b 表示函式中可以訪問外部變數b,而且引數b是按值傳遞,b 表示引數b是按引用傳遞,表示可以訪問所有外部變數,並且是用按值傳遞方式,類似,也...
C 11 新特性試用
在c 11之前,auto關鍵字用來指定儲存期。在新標準中,它的功能變為型別推斷。auto現在成了乙個型別的佔位符,通知編譯器去根據初始化 推斷所宣告變數的真實型別。各種作用域內宣告變數都可以用到它。例如,名空間中,程式塊中,或是for迴圈的初始化語句中。auto i 42 i is an int a...
C 11 新特性總結
vs2012以上版本支援 一.auto的使用 auto func less 自動表示函式指標 auto ite vector a.begin 自動表示stl的迭代器 auto p new foo 自動表示變數指標等變數 二.decltype int x 3 decltype x y x 從變數或表示...