C/C++基础语法复习(一):C++与C语言的区别,主要有这些!
?
和C的區(qū)別:
1.概念:
C++ 是一種靜態(tài)類型的、編譯式的、通用的、大小寫敏感的、不規(guī)則的編程語言,支持過程化編程、面向?qū)ο缶幊毯头盒途幊獭?/p>
C++ 被認(rèn)為是一種中級語言,它綜合了高級語言和低級語言的特點(diǎn)。
C++的很多基礎(chǔ)語法跟C差不多。
2. 函數(shù)默認(rèn)值:
C89標(biāo)準(zhǔn)的C語言不支持函數(shù)默認(rèn)值,C++支持函數(shù)默認(rèn)值,且需要遵循從右向左賦初始值。
3.函數(shù)重載:
C語言不存在函數(shù)重載,C++根據(jù)函數(shù)名參數(shù)個數(shù)參數(shù)類型判斷重載,屬于靜多態(tài),必須同一作用域下才叫重載。
C不有是因?yàn)榫幾g器在編譯的時候只會給函數(shù)重命名,所以在編譯器看來重載函數(shù)們都是一樣的(編譯器不知道該調(diào)用哪個)。C++的重載函數(shù)們生成的符號表是不一樣的(根據(jù)返回類型和參數(shù)類型數(shù)量等區(qū)分),所以可以搞函數(shù)重載.
4.const:
C中的const叫只讀變量,只是無法做左值的變量;C++中的const是真正的常量,但也有可能退化成c語言的常量,默認(rèn)生成local符號。
5.分配內(nèi)存:
a. malloc()和free()是C語言中動態(tài)申請內(nèi)存和釋放內(nèi)存的標(biāo)準(zhǔn)庫中的函數(shù)。而new和delete是C++運(yùn)算符。new和delete底層其實(shí)還是調(diào)用了malloc和free。
b. malloc時需要指定大小,還需要類型轉(zhuǎn)換。new時不需要指定大小因?yàn)樗梢詮慕o出的類型判斷,并且還可以同時賦初始值。(這也使得malloc不安全)
c. free只釋放空間,delete先調(diào)用析構(gòu)函數(shù)再釋放空間(如果需要).同理,new也是先調(diào)用構(gòu)造函數(shù)再申請空間。
d.?內(nèi)存不足(開辟失敗)時處理方式不同。malloc失敗返回0,new失敗拋出bad_alloc異常。
e.?new和malloc開辟內(nèi)存的位置不同。malloc開辟在堆區(qū),new開辟在自由存儲區(qū)域。
6.作用域:
多了個名字空間(namespace),所謂名字空間就是namespace,我們定義一個名字空間就是定義一個新作用域。
7.布爾常量:
布爾常量共有兩個,它們都是標(biāo)準(zhǔn)的 C++ 關(guān)鍵字:
True 和 false,顧名思義就是對與錯。
(C里面都是讓程序員自己定義)
8.Lambda 函數(shù):
C++11 提供了對匿名函數(shù)的支持,稱為 Lambda 函數(shù)(也叫 Lambda 表達(dá)式)。
Lambda 表達(dá)式把函數(shù)看作對象。Lambda 表達(dá)式可以像對象一樣使用,比如可以將它們賦給變量和作為參數(shù)傳遞,還可以像函數(shù)一樣對其求值。
Lambda 表達(dá)式本質(zhì)上與函數(shù)聲明非常類似。
表達(dá)式例子:
[capture](parameters)->return-type{body}
[capture]:捕捉列表。捕捉列表總是出現(xiàn)在 lambda 表達(dá)式的開始處。事實(shí)上,[] 是 lambda 引出符。編譯器根據(jù)該引出符判斷接下來的代碼是否是 lambda 函數(shù)。捕捉列表能夠捕捉上下文中的變量供 lambda 函數(shù)使用。
(parameters):參數(shù)列表。與普通函數(shù)的參數(shù)列表一致。如果不需要參數(shù)傳遞,則可以連同括號 () 一起省略。
mutable:mutable 修飾符。默認(rèn)情況下,lambda 函數(shù)總是一個 const 函數(shù),mutable 可以取消其常量性。在使用該修飾符時,參數(shù)列表不可省略(即使參數(shù)為空)。
->return_type:返回類型。用追蹤返回類型形式聲明函數(shù)的返回類型。出于方便,不需要返回值的時候也可以連同符號 -> 一起省略。此外,在返回類型明確的情況下,也可以省略該部分,讓編譯器對返回類型進(jìn)行推導(dǎo)。
{statement}:函數(shù)體。內(nèi)容與普通函數(shù)一樣,不過除了可以使用參數(shù)之外,還可以使用所有捕獲的變量。 在 lambda 函數(shù)的定義式中,參數(shù)列表和返回類型都是可選部分,而捕捉列表和函數(shù)體都可能為空。
例子如下:
[](int x, int y){ return x < y ; }
[](int x, int y) -> int { int z = x + y;?return z + x; }
其實(shí)也不是很玄乎,匿名函數(shù)本質(zhì)上就是個隨手用的函數(shù),省去了定義的麻煩,直接用完就丟。也可以作為傳遞給某些應(yīng)用,比如消息處理。
9.輸入輸出:
引用:https://www.runoob.com/cplusplus/cpp-basic-input-output.html
博客園:Parachute黑喵
學(xué)習(xí)C/C++編程知識,感覺自學(xué)C++有難度的同學(xué),可以點(diǎn)擊C++編程,一起來交流學(xué)習(xí)!
總結(jié)
以上是生活随笔為你收集整理的C/C++基础语法复习(一):C++与C语言的区别,主要有这些!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Boost 1.34.0 终于5.12发
- 下一篇: C++编程笔记:贪心算法实现活动安排问题