C++的歷史

本文由 伯樂在線 - honpey 翻譯自 Albatross。歡迎加入 技術翻譯小組。轉載請參見文章末尾處的要求。

C++的歷史可以追溯到1979年,當時Bjarne Stroustrup(譯者注:C++之父)正在準備他的博士畢業論文,他有機會使用一種叫做Simula 的語言。顧名思義,Simula語言的主要作用是仿真。Simula 67是Simula語言的一種變種,被公認是首款支持面向對象的語言。Stroustrup發現面向對象的思想對于軟件開發非常有用,但是因Simula語言執行效率低,其實用性不強。

不久之后,Stroustrup開始著手“C with Classes”的研發工作,“C with Classes”表明這種新語言是在C基礎上研發的,是C語言的超集。C語言以其高可移植性而廣受好評,且程序執行速度以及底層函數的性能不受程序移植的影響,Stroustrup要做的就是將面向對象的思想引入C語言。新語言的初始版本除了包括C語言的基本特征之外,還具備類、簡單繼承、內聯機制、函數默認參數以及強類型檢查等特性。

Bjarne Stroustrup的第一款“C with classes”編譯器叫Cfront,這個名字源自一個叫做Cpre的C編譯器。Cfront的機理是把“C with classes”的代碼翻譯成原生C代碼。頗為有趣的一點是Cfront源碼大部分是由“C with Classes”編寫,這使得Cfront成為了一種自足執行的編譯器(可以編譯自身源碼的編譯器)。由于很難整合C++的異常機制,Cfront在1993年退出了歷史的舞臺,但是它對以后C++編譯器以及Unix操作系統的實現都產生了深遠的影響。

1983年,“C with Classes”語言更名為C++。C語言中“++”運算子的作用是對一個變量進行遞增操作,由此我們多少可以知曉Stroustrup對這種新語言的定位。這個時期,許多重要的特性被加入,其中包括虛函數、函數重載、引用機制(符號為&)、const關鍵字以及雙斜線的單行注釋(從BCPL語言引入)。

1985年,Stroustrup的C++參考手冊《C++ Programming Language》出版,同年,C++的商業版本問世。由于當時C++并沒有正式的語言規范,因此《C++ Programming Language》成了業界的重要參考。1989年,C++再次版本更新,這次更新引入了多重繼承、保護成員以及靜態成員等語言特性。

1990年,《Annotated C++ Reference Manual》發布,同年,Borland公司的商業版Turbo C++編譯器問世。Turbo C++附帶了大量函數庫,這一舉措對C++開發產生了極為深遠的影響。雖然Turbo C++上一個穩定的版本發布于2006年,但當前該編譯器仍被廣泛使用。

1998年,C++標準委員會發布了C++語言的第一個國際標準—ISO/IEC 14882:1998,該標準即為大名鼎鼎的C++98。C++98的提出,《The Annotated C++ Reference Manual》功不可沒。同時,1979年開始研發的標準模板庫(Standard Template Library,STL)也被納入了該版標準中。2003年,標準委員會針對98版本中存在的諸多問題進行了修訂,修訂后發布了C++03。

2005年,C++標準委員會發布了一份技術報告(Technical Report,TR1)詳細說明了計劃引入C++的新特性。這個新標準被非正式地命名為C++0x,因為其預計會在本世紀第一個十年的某個時間發布。諷刺的是,直到2011年年中該標準才面世,相應的技術文檔也隨之出爐,一些編譯器廠商也開始試驗性地支持這些新特性。

2011年中,新的C++標準(C++11)面世。Boost庫對該版本影響很大,一些新的模塊甚至直接衍生于Boost中相應的模塊。一些新的語言特性,包括正則表達式(正則表達式詳情)、完備的隨機數生成函數庫、新的時間相關函數,原子操作支持、標準線程庫(2011之前,C和C++語言均缺少對線程的支持)、一種能夠和某些語言中foreach語句達到相同效果的新的for語法、auto關鍵字、新的容器類、更好的union支持、數組初始化列表的支持以及變參模板的支持等等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447961.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447961.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447961.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

asp.net ajax的學習第一篇

自己理解的asp.net ajax的核心思想&#xff1a; javascript 調用web service <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />由于工作的原因&#xff0c;要在自己的網頁上使用無刷新技術&#xff0c;增加客戶體驗。開始學習asp…

insertSelective 和 insert 的區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1、selective的意思是&#xff1a;選擇性。 2、insertSelective--選擇性保存數據&#xff1b; 比如User里面有三個字段:id&#xff0c;n…

病從口入 這樣吃小心癌癥找上門

腫瘤專家估計&#xff0c;大約有35%的致癌物質是經過飲食&#xff0c;30%是經過吸煙侵入體內的。僅此兩項已經占了致癌因素入侵人體的一半以上了。所以說&#xff0c;預防腫瘤&#xff0c;飲食首當其沖&#xff0c;第一步就要從入口的食物談起。 食管癌&#xff1a;腌制的咸…

VUE插件總結

UI組件 element - 餓了么出品的Vue2的web UI工具套件Vux - 基于Vue和WeUI的組件庫mint-ui - Vue 2的移動UI元素iview - 基于 Vuejs 的開源 UI 組件庫Keen-UI - 輕量級的基本UI組件合集vue-material - 通過Vue Material和Vue 2建立精美的app應用muse-ui - 三端樣式一致的響應式 …

解決:No goals have been specified for this build. You must specify a valid lifecycle phase or a goal i

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 執行打包命令報錯&#xff1a; No goals have been specified for this build. You must specify a valid lifecycle phase or a goa…

十個好習慣幫你理財省大錢

理財和收入高低其實是沒有關系的&#xff0c;僅和生活習慣相關。有了好的理財方法&#xff0c;也可以攢下自己的錢&#xff0c;達到財務自由的境界。下面是一些理財的技巧? 1、定時積極的存款 怎樣開源節流是理財的第一步。增加收入來源&#xff0c;算好該存的錢&#xff0…

生成隨機碼,保存隨機文件.

PrivateFunction GetRandomizeNo()Function GetRandomizeNo() As Integer 功能說明:生成隨機驗證碼 Dim RandomizeNo As Integer Randomize() RandomizeNo 9999 * Rnd() 1000 If (RandomizeNo).ToString.Length > 5 Then R…

解決:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) ...

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)問題&#xff0c;即在mybatis中dao接口與mapper配置…

真實股市房市信托本質,金融故事三則:錢都去哪兒了?

什么叫做虛擬經濟、泡沫經濟、次貸危機、金融危機?看完本文這幾個簡短精辟故事&#xff0c;你就都知道了。 故事&#xff08;1&#xff09; 有一個商人到了一個山村&#xff0c;村子周圍的山上全是猴子。 商人就和村子種地的農民說&#xff0c;我買猴子&#xff0c;100元一只…

Mac 遠程命令工具

轉載于:https://www.cnblogs.com/BrightMoon/p/4479375.html

Springboot Mybatis 整合(完整版)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 正題 本項目使用的環境&#xff1a; 開發工具&#xff1a;Intellij IDEA 2017.1.3 springboot: 1.5.6 jdk&#xff1a;1.8.0_161 maven…

OpenCL 第5課:向量相加

OpenCL程序分為兩個部份&#xff0c;一部份是內核代碼&#xff0c;負責具體算法。另一部份是主程序負責初始化OpenCL和準備數據。主程序加載內核代碼&#xff0c;并按照即定方法進行運算。 內核代碼可以寫在主程序里面&#xff0c;也可以寫在另一個文本文件里&#xff0c;有點…

同名的const 成員函數

如下代碼&#xff1a;struct Derived{ void foo(string) { cout<<"ddd foo"<<endl; }; void foo(string) const { cout<<"ddd foo const"<<endl; };}; int _tmain(int argc, TCH…

springboot 中使用 Mybatis 注解 配置 詳解

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 傳參方式 使用不同的傳參方式&#xff1a; 使用Param 之前博文中的項目使用了這種簡單的傳參方式&#xff1a; Insert("INSERT IN…

mongodb數據庫的備份與恢復

先介紹下命令語法&#xff1a; ./mongodump -h 127.0.0.1:10001 -d lietou -o /usr/local/data -h&#xff1a;MongDB所在服務器地址&#xff0c;例如&#xff1a;127.0.0.1&#xff0c;當然也可以指定端口號&#xff1a;127.0.0.1:10001 -d&#xff1a;需要備份的數據庫實例…

OpenCL 第6課:矩陣轉置

上一節我們寫了個一維向量相加的程序。這節我們來看一個44矩陣轉置程序。 4X4矩陣我們采用二維數組進行存儲&#xff0c;在程序設計上&#xff0c;我們讓轉置過程分4次轉置完成&#xff0c;就是一次轉一行。注意這里的OpenCL的工作維數是二維。&#xff08;當然用一維的方式也…

springboot 系列技術教程目錄

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、教程目錄地址&#xff1a; springboot系列技術教程目錄 二、教程內容&#xff1a; springboot2.X系列&#xff1a; springboot整…

OpenCL 第7課:旋轉變換(1)

旋轉是一個常用的處理功能。圖片中所有的點以某一個點為軸&#xff0c;順時或逆時方向旋轉N個角度。我們利用OpenCL就可以對圖片中所有的點進行并行轉換&#xff0c;大大提高效率。 上兩節中&#xff0c;我們編寫了CL文件來傳遞數組的地址&#xff0c;這一節中我們會多加入幾個…

WinForms多線程編程之搖獎程序

利用多線程模擬一個電腦搖獎程序&#xff0c;如圖所示。在點擊【滾動號碼】&#xff0c;啟動線程&#xff0c;對后臺的電話號碼進行循環顯示&#xff1b;點擊【開獎】按鈕&#xff0c;關閉線程&#xff0c;此時顯示在文本框中的電話號碼即為中獎號碼 using System;using System…

idea 版本控制忽略文件、文件夾設置

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 setting 中&#xff1a; 或者底部的 設置 忽略某個文件 后面選擇框可以去選擇 忽略某個文件夾 后面選擇框可以去選擇 忽略某種文件 后面…