最近要刷題,重溫一下C++基本的概念,,,233
1.概念:
C++ 是一種靜態型別的、編譯式的、通用的、大小寫敏感的、不規則的編程語言,支持程序化編程、面向物件編程和泛型編程,
C++ 被認為是一種中級語言,它綜合了高級語言和低級語言的特點,
和C的區別:
C++的很多基礎語法跟C差不多,
2. 函式默認值:
C89標準的C語言不支持函式默認值,C++支持函式默認值,且需要遵循從右向左賦初始值,
3.函式多載:
C語言不存在函式多載,C++根據函式名引數個數引數型別判斷多載,屬于靜多型,必須同一作用域下才叫多載, C不有是因為編譯器在編譯的時候只會給函式重命名,所以在編譯器看來多載函式們都是一樣的(編譯器不知道該呼叫哪個),C++的多載函式們生成的符號表是不一樣的(根據回傳型別和引數型別數量等區分),所以可以搞函式多載.
4.const:
C中的const叫只讀變數,只是無法做左值的變數;C++中的const是真正的常量,但也有可能退化成c語言的常量,默認生成local符號,
5.分配記憶體:
a. malloc()和free()是C語言中動態申請記憶體和釋放記憶體的標準庫中的函式,而new和delete是C++運算子,new和delete底層其實還是呼叫了malloc和free,
b. malloc時需要指定大小,還需要型別轉換,new時不需要指定大小因為它可以從給出的型別判斷,并且還可以同時賦初始值,(這也使得malloc不安全)
c. free只釋放空間,delete先呼叫解構式再釋放空間(如果需要).同理,new也是先呼叫建構式再申請空間,
d. 記憶體不足(開辟失敗)時處理方式不同,malloc失敗回傳0,new失敗拋出bad_alloc例外,
e. new和malloc開辟記憶體的位置不同,malloc開辟在堆區,new開辟在自由存盤區域,
6.作用域:
多了個名字空間(namespace),所謂名字空間就是namespace,我們定義一個名字空間就是定義一個新作用域,
7.布爾常量:
布爾常量共有兩個,它們都是標準的 C++ 關鍵字:
True 和 false,顧名思義就是對與錯,
(C里面都是讓程式員自己定義)
8.Lambda 函式:
C++11 提供了對匿名函式的支持,稱為 Lambda 函式(也叫 Lambda 運算式),
Lambda 運算式把函式看作物件,Lambda 運算式可以像物件一樣使用,比如可以將它們賦給變數和作為引數傳遞,還可以像函式一樣對其求值,
Lambda 運算式本質上與函式宣告非常類似,
運算式例子:
[capture](parameters)->return-type{body}
[capture]:捕捉串列,捕捉串列總是出現在 lambda 運算式的開始處,事實上,[] 是 lambda 引出符,編譯器根據該引出符判斷接下來的代碼是否是 lambda 函式,捕捉串列能夠捕捉背景關系中的變數供 lambda 函式使用,
(parameters):引數串列,與普通函式的引數串列一致,如果不需要引數傳遞,則可以連同括號 () 一起省略,
mutable:mutable 修飾符,默認情況下,lambda 函式總是一個 const 函式,mutable 可以取消其常量性,在使用該修飾符時,引數串列不可省略(即使引數為空),
->return_type:回傳型別,用追蹤回傳型別形式宣告函式的回傳型別,出于方便,不需要回傳值的時候也可以連同符號 -> 一起省略,此外,在回傳型別明確的情況下,也可以省略該部分,讓編譯器對回傳型別進行推導,
{statement}:函式體,內容與普通函式一樣,不過除了可以使用引數之外,還可以使用所有捕獲的變數, 在 lambda 函式的定義式中,引數串列和回傳型別都是可選部分,而捕捉串列和函式體都可能為空,
例子如下:
[](int x, int y){ return x < y ; }
[](int x, int y) -> int { int z = x + y; return z + x; }
其實也不是很玄乎,匿名函式本質上就是個隨手用的函式,省去了定義的麻煩,直接用完就丟,也可以作為傳遞給某些應用,比如訊息處理,
9.輸入輸出:
參考:https://www.runoob.com/cplusplus/cpp-basic-input-output.html
下一章講最重要的面對物件編程部分,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/84912.html
標籤:C++
下一篇:[資料結構入門]線段樹
