0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++簡史:C++是如何開始的

北匯信息POLELINK ? 2024-01-11 09:00 ? 次閱讀

MISRA C++:2023,MISRA? C++ 標(biāo)準(zhǔn)的下一個版本,來了!為了幫助您做好準(zhǔn)備,我們介紹了 Perforce 首席技術(shù)支持工程師 Frank van den Beuken 博士撰寫的 MISRA C++:2023 博客系列的第二部分。

在這篇博客中,我們將深入探討 C++ 的歷史、編程語言多年來的發(fā)展歷程以及它的下一步發(fā)展方向。


簡介:C++ 歷史
C++是一種常用的通用編程語言,可以用它來編寫高效的程序。

正因為如此,它在安全關(guān)鍵型應(yīng)用領(lǐng)域也很受歡迎,例如汽車行業(yè),MISRA是最受歡迎的編碼標(biāo)準(zhǔn)之一。

讓我們來看看這門語言的迷人歷史。

C++是如何開始的
C++是由AT&T貝爾實驗室的丹麥計算機科學(xué)家Bjarne Stroustrup于1979年發(fā)明的。它起源于對 UNIX 內(nèi)核的分析,目的是研究它可以在多大程度上分布在網(wǎng)絡(luò)上。

當(dāng) Stroustrup 在劍橋大學(xué)計算實驗室撰寫博士論文時,他對用于編寫模擬器的Simula編程語言的程序組織和并發(fā)特性印象深刻。然而,他發(fā)現(xiàn)實現(xiàn)的擴展性不好,所以最終用 BCPL 重寫了模擬器。

C 與類
在AT&T貝爾實驗室的工作中,Stroustrup決定用他在Simula中發(fā)現(xiàn)非常有用的語言功能來增強C編程語言。他開始編寫一個預(yù)處理器 Cpre ,將帶有類似 Simula 類的 C 程序轉(zhuǎn)換為可以使用現(xiàn)有編譯器編譯的常規(guī) C 代碼。這門新語言最初被簡單地命名為“C with Classes”。

從一開始,目標(biāo)就是讓新語言可以用于 C 語言的所有用途,因此它是一種通用編程語言。此外,由于 C 編譯器已經(jīng)可用于許多平臺,因此它繼承了 C 的可移植性,這是迄今為止它的重要質(zhì)量特性之一。該語言的另一個目標(biāo)是為 C 語言的不安全特性提供更好的替代方案,同時保持其效率和對底層硬件特性的直接訪問。

C提供的類:
? 類
? 派生類
? 公共/專用訪問控制
? 構(gòu)造函數(shù)和析構(gòu)函數(shù)
? 調(diào)用和返回功能(由于缺乏普及,很快被刪除)
? 友元類
? 函數(shù)參數(shù)的類型檢查
? 內(nèi)聯(lián)函數(shù)
? 默認參數(shù)
? 賦值運算符重載

C++
在 C++ 歷史上的這一點上,該語言需要一個專有的名稱。一段時間以來,它一直被稱為C84,但這被認為是丑陋和令人困惑的。最終,計算機科學(xué)家Rick Mascitti提出了C++這個名字,這可以解釋為該語言是C的繼承者。

隨著更多的功能被添加到該語言中, Cpre 預(yù)處理器不再適用,因此編寫了一個合適的編譯器名稱Cfront。為了方便起見,它仍然生成 C 代碼,但它是一個合適的編譯器,因為它對語法和語義進行了完整的檢查,并生成了程序的內(nèi)部表示,每個范圍都有一個符號表。

新的語言功能包括:
? 虛擬功能
? 函數(shù)名稱和運算符重載
? 引用
? 常量
? 用戶控制的空閑存儲內(nèi)存控制
? 改進了類型檢查和 C++ 樣式注釋(實際上取自 BCPL)

1986年,《C++編程語言》一書的第一版出版,根據(jù) Cfront 1.0編譯器描述了該語言。

C++ 版本 2.0
該語言的第二版于1989年完成,提高了其定義和實現(xiàn)的穩(wěn)定性。
添加了 C++ 2.0:
? 多重繼承
? 類型安全聯(lián)動
? 改進了重載函數(shù)的分辨率
? 賦值和初始化的遞歸定義
? 改進了用戶定義的內(nèi)存管理功能
? 抽象類
? 靜態(tài)成員函數(shù)
? Const 成員函數(shù)
? 受保護的成員
? 運算符重載 -> 和指向成員的指針的重載

C++ 版本 3.0
這是該語言標(biāo)準(zhǔn)化之前的最后一個 C++ 版本。C++ 3.0 于 1991 年完成,并添加了類和函數(shù)模板。C++ 4.0 應(yīng)該在 1993 年發(fā)布,增加異常處理功能,1992年惠普完成了該功能的初步實現(xiàn),但一直沒有完成。

帶注釋的 C++ 參考手冊
AT&T計劃推出新的C++編譯器計劃從未實現(xiàn),而其他C++編譯器,包括商業(yè)編譯器(包括Borland,IBM,DEC和Microsoft)和開源GNU編譯器g++都出現(xiàn)了。因此,Stroustrup 的重點轉(zhuǎn)移到了語言的開發(fā)和標(biāo)準(zhǔn)化上。1991 年出版 的《注釋 C++ 參考手冊 》成為語言標(biāo)準(zhǔn)的起點。該手冊提供了 C++ 的完整定義,而不僅僅是 Cfront 3.0 實現(xiàn)的功能,并且來自不同組織的許多人都對其進行了審查。新特性包括命名空間、嵌套類和異常處理。

C++98
C++ 的 ANSI 標(biāo)準(zhǔn)化由 Hewlett-Packard 與 AT&T、DEC 和 IBM 于 1989 年共同發(fā)起。標(biāo)準(zhǔn)化語言之所以成為必要,有幾個原因:增加重要的新特征,防止不兼容方言的發(fā)展。1991年,ISO標(biāo)準(zhǔn)化開始,從那時起,委員會舉行了聯(lián)席會議。

一項重要的活動是標(biāo)準(zhǔn)庫的定義,包括標(biāo)準(zhǔn)模板庫(STL)。此外,它補充說:
? 實時類型信息(RTTI:dynamic_cast、typeid)
? 協(xié)變返回類型
? 強制轉(zhuǎn)換運算符
? 可變
? 布爾
? 條件聲明
? 成員模板
? 類內(nèi)成員初始值設(shè)定項
? 模板的單獨編譯(導(dǎo)出)
? 模板部分專用化
? 重載函數(shù)模板的部分排序

C++03 和嵌入式 C++
C++03 是 C++98 的維護版本,經(jīng)過修訂,并批準(zhǔn)了技術(shù)勘誤的更正。委員會也開始考慮C++0x。

與此同時,包括東芝、日立、富士通和NEC在內(nèi)的日本嵌入式系統(tǒng)工具開發(fā)商聯(lián)盟提出了嵌入式C++(EC++)子集。這是為嵌入式系統(tǒng)編程而設(shè)計的。該子集刪除了可能損害性能或被認為對開發(fā)人員來說過于復(fù)雜的語言功能,因此被視為生產(chǎn)力或正確性風(fēng)險。

被禁止的功能是多重繼承、模板、異常、RTTI、新樣式的強制轉(zhuǎn)換和命名空間。此外,STL 和語言環(huán)境已從標(biāo)準(zhǔn)庫中刪除,并提供了 iostreams 的替代方案。有趣的是,EC++ 的使用并不多,添加模板的“擴展的EC++”超集更受歡迎。

作為對 EC++ 的回應(yīng),委員會發(fā)布了《性能技術(shù)報告》。性能技術(shù)報告提供了使用各種 C++ 語言和庫功能所隱含的時間和空間開銷的模型。在這樣做的過程中,它解決了對性能問題的擔(dān)憂。此外,它還介紹了有效實施的技術(shù)。因此,ISO 委員會不認可 EC++。

C++11
這個版本引入了許多新的主要功能,所以對于許多程序員來說,它感覺就像一門新語言!

C++11 添加了:
? 內(nèi)存模型
? 并發(fā)
? Auto 和 decltype
? 范圍
? 移動語義和右值引用
? 統(tǒng)一初始化
? 零點
? Constexpr 函數(shù)
? 用戶定義的文本
? 原始字符串文本
? 屬性
? Lambdas
? 可變參數(shù)模板
? 模板別名(使用)
? Noexcept
? 覆蓋和最終
? Static_assert
? Long long
? 默認成員初始值設(shè)定項
? 在構(gòu)造函數(shù)中初始化
? 枚舉類

標(biāo)準(zhǔn)庫也進行了重大補充。1998年,Boost組織成立,提供免費的同行評審的可移植C++源代碼庫。Boost 庫很重要,因為其中很早就提供了各種庫功能,因此 ISO 標(biāo)準(zhǔn)可以從使用中獲得的經(jīng)驗中受益。內(nèi)存模型是并發(fā)支持的重要基礎(chǔ),它提供了線程和鎖。
移動語義可以提高效率,因為它消除了不必要的副本,這對于大型對象來說可能很昂貴。它允許開發(fā)人員控制是否復(fù)制資源,或者是否應(yīng)將其所有權(quán)轉(zhuǎn)移到另一個對象,從而完成對對象生存期和資源管理的控制。

C++14
ISO C++ 委員會打算對主要和次要版本進行更改,以便 C++14 旨在完成 C++11。它補充道:
? 二進制文本 (0b)
? 數(shù)字分隔符
? 變量模板
? 函數(shù)返回類型推導(dǎo)
? 通用 lambdas
? constexpr 函數(shù)中的局部變量
? 移動捕獲
? 按類型訪問元組
? 標(biāo)準(zhǔn)庫中的用戶定義的文本

C++17
在次要的 C++ 14 發(fā)布之后, C++17 應(yīng)該是一個重大更新。不幸的是,一些主要的預(yù)期功能,如概念和協(xié)程,沒有出現(xiàn)在這個版本中。
新的主要功能包括:
? 類模板參數(shù)推導(dǎo)(介紹推導(dǎo))
? 結(jié)構(gòu)化綁定
? 內(nèi)聯(lián)變量
? 折疊表達式
? 在條件下進行顯式測試
? 有保證的副本省略
? 更嚴(yán)格的表達式計算順序
? 自動作為模板參數(shù)類型
? 捕獲常見錯誤的標(biāo)準(zhǔn)屬性
? 十六進制浮點文字
? “if constexpr”

一些新功能是增加對函數(shù)式編程風(fēng)格的支持的示例。這方面的關(guān)鍵元素已經(jīng)由C++11中的lambdas提供,但折疊表達式(一種使用運算符將參數(shù)列表簡化為單個值的方便表示法)和推導(dǎo)指南增加了語言的功能風(fēng)味。

C++20
C++17 中沒有的主要功能在 C++20 中添加。因此,這個版本向前邁出了一大步,與從 C++03 到 C++11 的步驟相當(dāng),所以我們可以說這個版本是 C++17 應(yīng)該的重大升級。

主要的新語言功能包括:
? 推論
? 概念
? 模塊

其他新的語言功能包括編譯時計算支持、宇宙飛船運算符 <=>、并發(fā)性改進、指定的初始值設(shè)定項以及非類型模板參數(shù)中的類類型(還允許字符串文字作為模板參數(shù))。此外,新的標(biāo)準(zhǔn)庫功能包括范圍、日期、跨度和格式。

模塊最終提供了一種比基于預(yù)處理器的更好的表達模塊化的方式,其中包括繼承自 C 的文件機制。Coroutines為異步執(zhí)行順序代碼提供了一個無堆棧機制,概念是模板參數(shù)上的命名需求集,是模板接口的一部分。它們可以指定模板的預(yù)期用途,并在不滿足約束條件時大大提高編譯錯誤的清晰度。與以前使用“替換失敗不是錯誤”(SFINAE) 的做法相比,這是一個顯著的改進,后者在違反約束時會導(dǎo)致長時間而復(fù)雜的編譯錯誤。

C++的未來
自 1979 年邁出第一步以來,C++ 已經(jīng)走過了漫長的道路,并且還在不斷發(fā)展。

C++23 將很快發(fā)布,并進行了小但重要的調(diào)整,并且 C++26 的工作已經(jīng)開始。

C++的受歡迎程度不斷上升,其使用范圍也在擴大——包括通過虛幻引擎創(chuàng)建虛擬現(xiàn)實 (VR) 應(yīng)用程序,以及加密貨幣應(yīng)用程序。

信任 C++ 的 Perforce 靜態(tài)分析
30 多年來,Perforce 的靜態(tài)分析工具 Helix QAC 和 Klocwork 因其安全、可靠和高質(zhì)量的 C、C++ 等代碼而備受信賴。我們的工具可在您編碼時識別缺陷、漏洞和合規(guī)性問題,并經(jīng)過認證可用于安全關(guān)鍵型應(yīng)用程序。

Helix QAC 還提供合規(guī)性模塊,用于執(zhí)行 新的 MISRA C++:2023 指南。Perforce 計劃在標(biāo)準(zhǔn)發(fā)布時提供完整的 MISRA C++:2023 合規(guī)性模塊。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136808
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1945

    瀏覽量

    34735
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4331

    瀏覽量

    62605
收藏 人收藏

    評論

    相關(guān)推薦

    C語言與C++的區(qū)別

    在很大程度上,C++C的超集,這意味著一個有效的C程序也是一個有效的C++程序。
    發(fā)表于 09-16 10:20 ?1162次閱讀

    C++課件、習(xí)題及答案

    *1.1  從CC++*1.2  最簡單的C++程序 1.3  C++程序的構(gòu)成和書寫形式 1.4 
    發(fā)表于 09-08 09:35 ?108次下載
    <b class='flag-5'>C++</b>課件、習(xí)題及答案

    C++簡介 ppt

    C++簡介 目錄1.0  本科程在專業(yè)學(xué)習(xí)中的地位1.1  程序設(shè)計語言 1.2  C++前史 1.3  C++ 1.4  C++
    發(fā)表于 02-24 09:34 ?28次下載

    C++ 入門自學(xué)教程

    C++ 入門自學(xué)教程從入門知識開始講起,比較有利于初學(xué)者入門掌握,比較好懂,能夠?qū)?b class='flag-5'>C++有一個全面認識
    發(fā)表于 11-17 10:36 ?0次下載

    C++C/C++程序設(shè)計教程_C/C++概述

    C++基礎(chǔ)知識,簡要介紹了C++的一些簡單知識,概念,函數(shù)
    發(fā)表于 12-25 10:15 ?0次下載

    C++入門教程之C++程序設(shè)計的課件資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是C++入門教程之C++程序設(shè)計的課件資料免費下載主要內(nèi)容包括了:1. 認識C++2. C++的現(xiàn)狀和發(fā)展3. C++
    發(fā)表于 12-07 08:00 ?33次下載
    <b class='flag-5'>C++</b>入門教程之<b class='flag-5'>C++</b>程序設(shè)計的課件資料免費下載

    VISUAL C++教程之VISUAL C++的安裝和使用方法

    本文檔的主要內(nèi)容詳細介紹的是VISUAL C++教程之VISUAL C++的安裝和使用方法資料免費下載。
    發(fā)表于 12-27 16:32 ?19次下載
    VISUAL <b class='flag-5'>C++</b>教程之VISUAL <b class='flag-5'>C++</b>的安裝和使用方法

    C++程序設(shè)計教程之C++的初步知識的詳細資料說明

    C++程序設(shè)計教程之C++的初步知識的詳細資料說明包括了:1. 從CC++,2 . 最簡單的C++程序,3 .
    發(fā)表于 03-14 14:48 ?31次下載
    <b class='flag-5'>C++</b>程序設(shè)計教程之<b class='flag-5'>C++</b>的初步知識的詳細資料說明

    C++程序設(shè)計的基礎(chǔ)知識初步了解C++的資料免費下載

    本文檔的主要內(nèi)容詳細介紹的是C++程序設(shè)計的基礎(chǔ)知識初步了解C++的資料免費下載包括了:1 認識C++,2 C++的現(xiàn)狀和發(fā)展,3 C++
    發(fā)表于 06-10 08:00 ?25次下載
    <b class='flag-5'>C++</b>程序設(shè)計的基礎(chǔ)知識初步了解<b class='flag-5'>C++</b>的資料免費下載

    C++創(chuàng)造者:成功屬于意料之外

    的成功屬于意料之外 1979 年,C++ 的創(chuàng)建者 Bjarne Stroustrup 開始著手? ? Bjarne Stroustrup 一開始沒想到 C++ 會獲得如此大的成功,
    的頭像 發(fā)表于 01-02 09:46 ?1656次閱讀

    c++知識要點

    第一章 開始 1.1 編寫一個簡單的C++程序 int main() { return 0; } 每個C++程序都包含一個或多個函數(shù),其中一個必須命名為main.
    發(fā)表于 06-20 09:45 ?0次下載

    C++學(xué)習(xí)筆記之c++的基本認識

    自這篇文章我們即將開始C++的奇幻之旅,其內(nèi)容主要是讀C++ Primer的總結(jié)和筆記,有興趣可以找原版書看看,對于學(xué)習(xí)C++還是有很大幫助的。這篇文章將從一個經(jīng)典的程序
    的頭像 發(fā)表于 03-17 13:57 ?737次閱讀

    淺談C語言與C++的前世今生

    C++開發(fā)人員將有這些問題歸咎于C,而C開發(fā)人員則認為C++過于瘋狂。我覺得站在C的角度看C++
    發(fā)表于 05-26 09:27 ?465次閱讀
    淺談<b class='flag-5'>C</b>語言與<b class='flag-5'>C++</b>的前世今生

    C++之父新作帶你勾勒現(xiàn)代C++地圖

    為了幫助大家解決這些痛點問題,讓大家領(lǐng)略現(xiàn)代C++之美,掌握其中的精髓,更好地使用C++,C++之父Bjarne Stroustrup坐不住了,他親自操刀寫就了這本《C++之旅》!
    的頭像 發(fā)表于 10-30 16:35 ?853次閱讀
    <b class='flag-5'>C++</b>之父新作帶你勾勒現(xiàn)代<b class='flag-5'>C++</b>地圖

    c++怎么開始編程

    應(yīng)用程序、嵌入式系統(tǒng)和網(wǎng)絡(luò)應(yīng)用程序等各種領(lǐng)域。 在開始編程之前,你需要安裝C++的編程環(huán)境。首先,你需要下載并安裝一個編譯器,比如微軟的Visual Studio、GNU的GCC或者Clang。這些編譯器可以將你的C++代碼編譯
    的頭像 發(fā)表于 11-27 15:56 ?928次閱讀