C/C++基础语法复习(一):C++与C语言的区别,主要有这些!
?
和C的區別:
1.概念:
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
博客園:Parachute黑喵
學習C/C++編程知識,感覺自學C++有難度的同學,可以點擊C++編程,一起來交流學習!
總結
以上是生活随笔為你收集整理的C/C++基础语法复习(一):C++与C语言的区别,主要有这些!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Boost 1.34.0 终于5.12发
- 下一篇: C++编程笔记:贪心算法实现活动安排问题