C 11的新特徵

2021-07-05 05:32:05 字數 2205 閱讀 8688

c++11對從前的語言做了很大的擴充套件,在我的感覺來看,加入了很多類似於python的語法,在以前嚴謹完整的基礎上增加了便捷性,更加人性化了,這裡摘取一部分書上提到的新特徵,做乙個讀書筆記。

1. 使用auto自動宣告變數或者物件

比如說:

auto i = 42; // i has type int

double f();

auto d = f(); // d has type double

這個功能實在是太便捷了,特別是在宣告一些型別特別複雜的變數的時候,就顯得更加可愛了,比如說:

vectorv;

...auto pos = v.begin(); // pos has type vector::iterator

auto l = (int x) -> bool ; // returning a bool

但是要記住的是,它是根據初值自動判斷變數型別的,所以必須在使用auto的時候對變數進行初始化。

2. 統一的初始化形式和initializer_list<>

初始化有各種各樣的形式,諸如各種括號、等號、空格等等,有時候就會弄不清楚對於什麼變數需要使用哪種初始化的形式,因此c++11開始使用統一的初始化形式,使用者可以用一種通用的形式對各種型別的變數進行初始化,比如說:

int values ;

std::vector

v ;

std::vector

cities ;

std::complex

c;

c++11提供了std::initializer_list<>的模板讓使用者可以對自定義的型別進行初始化,用法如下:

void print (std:

:initializer_list vals)

}print ();

對於initializer_list<>還有一些詳細的語法規則,以後遇到再詳細介紹。

3. for 迴圈

這是我覺得十分人性化的乙個改進,不多說,上例子:

for (int

i :

)

這語法簡直就是shell指令碼的同胞兄弟,讀起來簡直讓人神清氣爽,但是現在並沒有多少人真的在乙個c程式中使用這種語法。

這種迴圈語法可以通用的這樣寫:

template

void printelements (const t& coll)

}

這與我們平常用的迴圈效果一樣,但是看起來會覺得更人性化。

4. move semantics and rvalue references

這一節沒有看懂,不是很理解rvalue和lvalue是什麼概念,copy assignment operator和move assignment operator也不是很懂,留待以後更新吧。

5. new string literals

這一節主要就是解決了碰到特殊字元時需要不停加轉義符的困擾,在c++11中可以使用raw string literal 很棒的解決:

r"(\\n)"
等價於

"\\

\\n"

有沒有很棒,更棒的是還可以使用分隔符,如:

r"nc(a\

b\nc()"

)nc";

等價於

"a\\

\n b\\nc()\"

\n "

從此就不用再去數backslash的數量了。

6. lambdas

其實今天還是我第一次接觸,還並不了解lambda的作用體現在**,簡單貼上最簡單的lambda 函式的使用:

在我現在看來lambda就是一種函式,你可以傳遞給它引數,讓它實現特定功能,返回需要的結果,不知道這和普通的自定義的函式有什麼區別

其實還有一些新特徵我沒有放上來,主要是我還不是很理解那些規則的用處,這一章就寫到這裡了,關於上文中的疑問(用粗體標示),希望以後能夠解決,或者有熱心的朋友可以幫助解答。

c 11的新特性

1 型別說明符auto 2.decltype提取型別 int a 0 decltype a b b 10 cout b endl 3.基於範圍的for迴圈 4.虛函式的override和final指示符 final修飾類 類無法被繼承 final修飾虛函式 虛函式不能被重寫 override就是輔助...

C 11的新特性

c 11提供在類中定義類的資料成員,可以直接在成員之後新增 預設值 當通過編譯器自動生成的預設建構函式初始化物件時,對應的資料成員就會被初始化成對應的預設值。class test int main 在c 98中,陣列可以使用 來進行初始化,對自定義型別是不可以的。在c 11中,的使用範圍變得更廣,可...

C 11的新特性

1.auto關鍵字 編譯器可以根據初始值自動推導出型別。但是不能用於函式傳參以及陣列型別的推導。2.nullptr關鍵字 nullptr是一種特殊型別的字面值,它可以被轉換成任意其它的指標型別 而null一般被巨集定義為0,在遇到過載時可能會出現問題。3.智慧型指標 c 11新增了std share...