C++是什么?C++是一種廣泛使用的計(jì)算機(jī)程序設(shè)計(jì)語言,它在C語言的基礎(chǔ)上發(fā)展而來,增加了面向?qū)ο?、泛型編程等高級特性,在設(shè)計(jì)上旨在提供一種高效、靈活和可移植的編程語言,既能夠進(jìn)行系統(tǒng)級編程,又支持高級應(yīng)用程序開發(fā)。
一、概述
C++語言由Bjarne Stroustrup于1979年在貝爾實(shí)驗(yàn)室開發(fā),最初被命名為“C with Classes”,意在表明它是C語言的超集,增加了面向?qū)ο蟮奶匦浴?983年,該語言更名為C++。C++的設(shè)計(jì)目的是提供一種高效、靈活且具有通用性的編程語言,它結(jié)合了高級語言的易用性和低級語言的執(zhí)行效率。
面向?qū)ο缶幊淌荂++的核心特性之一,它使得程序可以通過定義類和對象來模擬現(xiàn)實(shí)世界中的事物和行為,從而提高了代碼的可重用性、可擴(kuò)展性和可維護(hù)性。另外,C++還引入了模板(templates)的概念,支持泛型編程,使得編寫通用的、高效的代碼變得更加容易。
二、語言特點(diǎn)
1、與C語言的兼容性
C++與C語言完全兼容,這意味著C語言的絕大部分內(nèi)容可以直接用于C++的程序設(shè)計(jì)。用C語言編寫的程序可以不加修改地用于C++,這為現(xiàn)有的C語言程序員提供了平滑過渡到C++的可能性,同時(shí)也保留了C語言的優(yōu)勢。
2、數(shù)據(jù)封裝和數(shù)據(jù)隱藏
在C++中,類是支持?jǐn)?shù)據(jù)封裝的工具,對象則是數(shù)據(jù)封裝的實(shí)現(xiàn)。數(shù)據(jù)封裝是指將數(shù)據(jù)和對該數(shù)據(jù)進(jìn)行操作的函數(shù)封裝在一起作為一個(gè)類的定義,隱藏了類的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),只暴露出必要的接口給外部使用。這種方式提高了代碼的可維護(hù)性和安全性。
3、支持繼承和重用
C++支持繼承和重用的思想,即在現(xiàn)有類的基礎(chǔ)上可以聲明新類型。通過繼承和重用可以更有效地組織程序結(jié)構(gòu),明確類間關(guān)系,并且充分利用已有的類來完成更復(fù)雜、深入的開發(fā)。子類可以從父類繼承所有非私有的屬性和方法,從而實(shí)現(xiàn)代碼的重用。
4、多態(tài)性
C++通過多態(tài)性為每個(gè)類指定表現(xiàn)行為,采用繼承和多態(tài)的結(jié)構(gòu)形成了一個(gè)樹型結(jié)構(gòu)。在這個(gè)樹中,每個(gè)子類可以接收一個(gè)或多個(gè)具有相同名字的消息,而對象動(dòng)態(tài)地決定消息的具體用法。多態(tài)性的特性允許使用高級抽象,提高了代碼的靈活性和可擴(kuò)展性。
三、語言標(biāo)準(zhǔn)
標(biāo)準(zhǔn)版本
|
發(fā)布時(shí)間
|
正式名稱
|
更新內(nèi)容
|
---|---|---|---|
C++ 03
|
2003年
|
ISO/IEC 14882:2003
|
對C++ 98版本的漏洞做了部分修改。
|
C++ 11
|
2011年8月12日
|
ISO/IEC 14882:2011
|
對容器類的方法做了三項(xiàng)主要修改:
1、新增了右值引用,可以給容器提供移動(dòng)語義。
2、新增了模板類initilizer_list,因此可將initilizer_list作為參數(shù)的構(gòu)造函數(shù)和賦值運(yùn)算符。
3、新增了可變參數(shù)模板(variadic template)和函數(shù)參數(shù)包(parameter pack),可以提供就地創(chuàng)建(emplacement)方法。
|
C++ 14
|
2014年8月18日
|
ISO/IEC 14882:2014
|
C++11的增量更新。主要是支持普通函數(shù)的返回類型推演,泛型lambda,擴(kuò)展的lambda捕獲,對constexpr函數(shù)限制的修訂,constexpr變量模板化等。
|
C++ 17
|
2017年12月6日
|
ISO/IEC 14882:2017
|
新增UTF-8 字符文字、折疊表達(dá)式(fold expressions):用于可變的模板、內(nèi)聯(lián)變量(inline variables):允許在頭文件中定義變量;在if和switch語句內(nèi)可以初始化變量;結(jié)構(gòu)化綁定(Structured Binding):for(auto [key,value] : my_map){…};類模板參數(shù)規(guī)約(Class Template Argument Deduction):用pair p{1, 2.0}; 替代pair{1, 2.0};;>;static_assert的文本信息可選;刪除trigraphs;在模板參數(shù)中允許使用typename(作為替代類);來自 braced-init-list 的新規(guī)則用于自動(dòng)推導(dǎo);嵌套命名空間的定義;允許命名空間和枚舉器的屬性;新的標(biāo)準(zhǔn)屬性:[[fallthrough]], [[maybe_unused]] 和 [[nodiscard]];對所有非類型模板參數(shù)進(jìn)行常量評估;Fold表達(dá)式,用于可變的模板;A compile-time static if with the form if constexpr(expression);結(jié)構(gòu)化的綁定聲明,允許auto [a, b]=getTwoReturnValues()。?
|
C++ 20
|
2020年12月7日
|
ISO/IEC 14882:2020
|
新增模塊(Modules)、協(xié)程(Coroutines)、范圍 (Ranges)、概念與約束 (Constraints and concepts)、指定初始化 (designated initializers)、操作符“<=> != ==”;constexpr支持:new/delete、dynamic_cast、try/catch、虛擬、constexpr向量和字符串;計(jì)時(shí):日歷、時(shí)區(qū)支持。
|
四、與C語言區(qū)別
1、面向?qū)ο筇匦裕篊++支持面向?qū)ο缶幊蹋∣OP),包括類、繼承、封裝和多態(tài)等概念,而C語言是一種純粹的過程化編程語言,不支持這些OOP特性。
2、函數(shù)重載:C++允許函數(shù)重載,即在同一范圍內(nèi)可以有多個(gè)同名函數(shù),只要它們的參數(shù)列表不同即可。C語言不支持函數(shù)重載,每個(gè)函數(shù)都必須有一個(gè)唯一的名稱。
3、默認(rèn)參數(shù):C++允許為函數(shù)參數(shù)設(shè)置默認(rèn)值,這簡化了函數(shù)調(diào)用,可以在不提供某些參數(shù)的情況下調(diào)用函數(shù)。C語言不支持默認(rèn)參數(shù)。
4、異常處理:C++提供了異常處理機(jī)制,可以使用try、catch和throw語句來處理運(yùn)行時(shí)錯(cuò)誤。C語言沒有內(nèi)置的異常處理機(jī)制,通常使用返回值來指示錯(cuò)誤。
5、標(biāo)準(zhǔn)模板庫:C++擁有一個(gè)強(qiáng)大的標(biāo)準(zhǔn)模板庫(STL),提供了一系列的容器、迭代器、算法和函數(shù)對象,極大地提高了編程效率和代碼質(zhì)量。C語言沒有類似的模板庫。