在c++11之前,auto關鍵字用來指定儲存期。在新標準中,它的功能變為型別推斷。auto現在成了乙個型別的佔位符,通知編譯器去根據初始化**推斷所宣告變數的真實型別。各種作用域內宣告變數都可以用到它。例如,名空間中,程式塊中,或是for迴圈的初始化語句中。
auto i = 42; // i is an int
auto p = new char; // p is a char *
使用auto通常意味著更短的**(除非你所用型別是int,它會比auto少乙個字母)。試想一下當你遍歷stl容器時需要宣告的那些迭代器(iterator)。現在不需要去宣告那些typedef就可以得到簡潔的**了。
map> map;
for (auto it = begin(map); it != end(map); ++it)
以前都是用0來表示空指標的,但由於0可以被隱式型別轉換為整形,這就會存在一些問題。關鍵字nullptr是std::nullptr_t型別的值,用來指代空指標。nullptr和任何指標型別以及類成員指標型別的空值之間可以發生隱式型別轉換,同樣也可以隱式轉換為bool型(取值為false)。但是不存在到整形的隱式型別轉換。
int* p1 = null;
int* p2 = nullptr;
if (p1 == p2)
bool f = nullptr;
重新執行結果:
p1 == p2
請按任意鍵繼續. . .
為了在遍歷容器時支援」foreach」用法,c++11擴充套件了for語句的語法。用這個新的寫法,可以遍歷c型別的陣列、初始化列表以及任何過載了非成員的begin()和end()函式的型別。
如果你只是想對集合或陣列的每個元素做一些操作,而不關心下標、迭代器位置或者元素個數,那麼這種foreach的for迴圈將會非常有用。
map> mapforloop;
vectorvec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
mapforloop["one"] = vec;
for (const auto& kvp : mapforloop) }
int arr = ;
for (int& e : arr)
for (int& e : arr)
重新執行結果:
one12
3149
1625
請按任意鍵繼續. . .
C 11新特性學習
lambda表示式用於建立匿名的函式物件,語法為 函式可訪問的的外部變數 函式引數 返回值型別 如 int a 1,b 2 int c b int x int b 表示函式中可以訪問外部變數b,而且引數b是按值傳遞,b 表示引數b是按引用傳遞,表示可以訪問所有外部變數,並且是用按值傳遞方式,類似,也...
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 從變數或表示...
C 11新特性輸出
在看到c 11 的一些特性之後,發現列印乙個集合內的元素的方法除了我們之前寫的for迴圈,還能夠有更簡單的寫法,並在其中應用了一些特性。列印1 for auto e v 列印2 使用copy演算法 std copy v.begin v.end std ostream iterator std cou...