「C++」C++11的新特性

瞭解C++的歷史可以幫助我們更好的學習語言。

C++11對C++做了很多改進,那麼具體是為了彌補哪些缺點呢?我們覆盤一下。


1、從C到C++

1979年4月,同樣是來自貝爾實驗室的本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)博士與同事接受了一項工作——嘗試分析UNIX的內核。但當時沒有合適的工具能夠有效地完成這個任務,很難將其內核模塊化,所以斯 大叔(不是斯達舒哦)的工作進展很慢。同年10月,斯大叔設計了一個預處理程序,稱之為“Cpre”。 所謂預處理程序,就是在源程序文件被最終編譯之前,對其進行預先處理的程序。Cpre為C語言加上了類似Simula語言的類機制(類機制,一種抽象和封 裝的機制。它將描述一個事物的數據抽象成類的屬性,而將對這些數據的操作抽象成類的方法,然後將屬性和方法封裝成類。在稍後的第6章中我們將重點介紹這個 概念)。在這個過程中,斯大叔萌生了創建一門新語言的想法。貝爾實驗室對這個想法很感興趣,就讓他組織一個開發小組,專門進行研究。

當時這門新語言並不是叫C++,而是叫C with class,它只是C語言的一個有效擴充,後來才更名為C++。當時C語言已經在所有程序設計語言中居於老大的地位,要想發展一種新的語言,最強大的競爭 對手就是C語言了。C++當時面臨兩個挑戰:第一,C++要在運行時間、代碼緊湊性和數據緊湊性方面與C語言相媲美;第二,C++要儘量避免在語言應用領 域的限制。在這種情況下,最簡單的方法就是繼承C語言的一些特性,讓C++語言具備C語言的各種優點。同時,斯大叔為了突破C語言的種種侷限,還借鑑了其 他程序設計語言的優點,實踐了編程界由來已久的“拿來主義”。例如

C++從Simula拿來了類的概念;

從Algol68拿來了操作符重載、引用以及在 任何地方聲明變量的能力;

從BCPL拿來了“//”註釋;從Ada拿來了模板、名字空間;

從Ada、Clu和ML拿來了異常處理等。

通過這一系列的拿來動 作,C++具備了多種程序設計語言的優秀基因,既系出名門,又博採眾家之長,從而完成了從C到C++的進化。


其後,C++又經歷了長期的發展,隨著標準模板庫(Standard Template Library,STL)的出現、泛型編程的發展,C++在2000年左右出現了其發展史上的一個高峰,而到了2011年,C++的最新標準C++11正 式發佈。這個新標準在C++的易用性和性能上作了大量改進,增加了線程庫等現代軟件開發所需要的內容,這也為C++的發展注入了新的動力。


2、C語言和C++的區別?

這是一個應屆生或者新手在面試時經常被問到的問題,從上面的介紹中,我們可以簡單歸納出C與C++的區別:

1、C是面向過程的語言,C++是一種面嚮對象語言,具有繼承、封裝、多態、抽象這四個面向對象的特性。

2、C++有操作符重載、引用等C沒有的。

3、C++有命名空間的概念。

4、C++具有異常處理的能力。


3、C++11的新特性

由於C語言的一些缺點,所以出現了C++11。


當C++馳騁工業界多年後,隨著硬件技術的不斷髮展,特別是多核技術的出現以及Java、C#等新語言的不斷湧現,C++的發展受到了很大的衝 擊,在業界的應用範圍不斷萎縮。C++曾經是Visual Studio 6.0中的首選語言,但是在後繼版本的Visual Studio中,特別是在微軟推出.NET Framework之後,C++的地位不斷下滑,被後來居上的C#搶了風頭。C++遇到了人生中的一次重大危機。

為了解決C++相對其他編程語言的弱點,2011年8月,C++11新標準出世,那麼C++有哪些新功能呢?


1、新的語法糖(為了語言更好用,改變語言語法的行為成為語法糖)

新的語法糖包括:nullptr, auto自動類型推導,範圍for循環,初始化列表, lambda表達式等

2、標準庫擴充,為了更方便簡單的使用C++,C++11對標準庫進行了擴充。新增array/forward_list/兩個unordered/tuple新容器。

3、右值引用與移動語義

4、.智能指針,C++11引入三種智能指針。

5、.多線程,C++11引入了併發編程庫 #include



總結

1、C與C++的區別?

2、C++11的新特性


分享到:


相關文章: