【C++】各個版本新的特性和改進

C++ 語言自從其誕生以來,經歷了多個版本的更新,每個版本都引入了新的特性和改進,目的是提升語言的表達能力、性能、安全性以及開發效率。下面是各個主要版本(從 C++98 到 C++20)的一些關鍵特性。

C++98 (1998年)

  • ISO C++ 標準化:C++98 是第一個國際標準化的版本,定義了 C++ 語言的核心規范。
  • STL(標準模板庫):在 C++98 中,STL 已經成為標準庫的一部分,提供了數據結構(如 vectorlistmap)和算法。
  • 異常處理:C++98 規范了異常處理機制(trycatchthrow)。

C++03 (2003年)

  • 小范圍改進:C++03 并沒有引入重大的新特性,而是主要進行了一些小的修正和澄清,修復了 C++98 中的一些錯誤和不一致性。
  • 編譯器兼容性改進:增強了跨平臺的兼容性,避免了 C++98 中的一些模糊或不確定的行為。

C++11 (2011年)

C++11 是一個重大更新,帶來了大量的新特性,使得 C++ 更加強大和現代化。

  • 自動類型推斷(auto:允許編譯器根據初始化表達式推斷變量類型。
  • 范圍-based for 循環:簡化了遍歷容器的語法。
  • 智能指針:引入了 std::unique_ptrstd::shared_ptr 等智能指針,簡化了內存管理。
  • lambda 表達式:支持匿名函數,使得代碼更加簡潔和靈活。
  • 并發支持:引入了 <thread> 頭文件和 std::thread,讓 C++ 支持原生線程并行編程。
  • 右值引用和移動語義:引入了右值引用(&&)和 std::move,顯著提升了性能,尤其在傳遞和返回大型對象時。
  • constexpr:支持常量表達式,使得一些計算可以在編譯時完成。

C++14 (2014年)

  • 小改進與修復:C++14 主要是對 C++11 的補充和修復,解決了一些問題和改進了一些特性。
  • Lambda 捕獲擴展:允許在 lambda 表達式中捕獲 *this
  • std::make_unique:引入 std::make_unique 用來創建 std::unique_ptr,避免手動使用 new
  • auto 的推導增強:在某些場景下,auto 可以推導更加復雜的類型。

C++17 (2017年)

C++17 引入了許多實用的功能和語言改進,進一步增強了 C++ 的表現力。

  • 結構化綁定聲明:可以將一個元組或者結構體分解為多個變量,例如 auto [x, y] = get_coords();
  • std::optionalstd::variantstd::any:為處理空值、不同類型或不確定類型的值提供了標準庫支持。
  • ifswitch 中的初始化語句:允許在 ifswitch 語句中直接聲明變量。
  • 并發改進std::shared_mutex 引入了讀寫鎖(讀多寫少時有效)。
  • std::filesystem:提供了文件系統操作的標準庫支持。
  • std::string_view:允許創建非擁有型的字符串視圖,避免了不必要的內存復制。

C++20 (2020年)

C++20 是一個具有革命性的更新,帶來了許多現代化的特性和語言增強。

  • 概念(Concepts):引入了概念,提供了類型約束機制,讓模板編程更安全、可讀和可維護。
  • 范圍庫(Ranges):為處理序列數據提供了更加高效和簡潔的方式,可以用 viewaction 等進行鏈式操作。
  • 模塊(Modules):提供了比傳統頭文件更高效的代碼組織方式,減少了編譯時間。
  • 協程(Coroutines):支持協程,讓異步編程更加簡單直觀。
  • 三向比較操作符(Spaceship Operator <=>:引入了三向比較符號,簡化了比較操作符的定義,尤其在排序時非常有用。
  • constevalconstinit:增強了對常量表達式和常量初始化的支持。
  • std::format:提供了類似 Python 的字符串格式化方法。
  • std::span:提供了一個輕量級的視圖類,用于處理數組或容器的子集。

C++23 (2023年)

C++23 繼續增強了語言的現代化和開發效率,主要改進包括:

  • 增強的范圍庫:范圍庫得到進一步擴展和優化,增加了更多實用的操作符和功能。
  • std::expected:類似于 std::optional,但可以表示期望的結果,包含成功或失敗的狀態。
  • constexpr 擴展:支持更多的標準庫函數和語言特性在編譯時計算。
  • 正則表達式改進:引入了更高效和更靈活的正則表達式 API。
  • 提高的標準庫支持:增加了更多的標準庫函數、算法和容器的優化。

總結

C++ 的每個版本都在逐步提升語言的表達能力、開發效率和執行性能。從 C++98 到 C++20,我們可以看到語言逐步引入了現代編程的諸多特性,如自動化內存管理、并發支持、類型系統改進、以及更易用的標準庫。這些特性不僅增強了語言的功能性,也使得 C++ 編程變得更加靈活和高效。

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

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

相關文章

C++模板與STL七日斬:從工業編程到高效數據管理(工業項目)

模板如何提升工業代碼復用性 實戰項目&#xff1a;創建通用【工業設備容器】模板類 類模板的定義與實例化模板參數默認值 #include <iostream> #include <string> using namespace std;template <typename T string> class IndustrialContainer { priva…

sh腳本把服務器B,服務器C目錄的文件下載到服務器A目錄,添加開機自啟動并且一小時執行一次腳本

腳本邏輯 第一次會下載,第二次比較如果有就不下載 文件已存在&#xff1a; 如果目標目錄中已經存在同名文件&#xff0c;rsync 會比較源文件和目標文件的大小和修改時間。 如果源文件和目標文件的大小和修改時間完全相同&#xff0c;rsync 會跳過該文件&#xff0c;不會重新下載…

云手機如何進行經緯度修改

云手機如何進行經緯度修改 云手機修改經緯度的方法因不同服務商和操作方式有所差異&#xff0c;以下是綜合多個來源的常用方法及注意事項&#xff1a; 通過ADB命令注入GPS數據&#xff08;適用于技術用戶&#xff09; 1.連接云手機 使用ADB工具連接云手機服務器&#xff0c;…

透徹理解:方差、協方差、相關系數、協方差矩陣及其應用

最近看了幾篇跨領域特征對齊方面的經典文獻&#xff0c;學者們搞了很多花樣&#xff0c;如有的提出一階統計特征對齊&#xff0c;有的提出二階統計特征對齊&#xff0c;有的學者提出高階統計特征對齊。 通俗而言&#xff0c;就是在統計特征層面對跨域特征進行對齊&#xff0c;…

Unity基礎學習(二)

二、Mono中的重要內容 1、延遲函數 &#xff08;1&#xff09;延遲函數定義 延遲執行的函數&#xff0c;可以設定要延遲執行的函數和具體延遲的時間 &#xff08;2&#xff09;延遲函數的使用 #region 1、延遲函數//函數&#xff1a;Invoke(函數名/字符串&#xff0c;延遲時…

20250212:ZLKMedia 推流

1:資料 快速開始 ZLMediaKit/ZLMediaKit Wiki GitHub GitHub - ZLMediaKit/ZLMediaKit: WebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT server and client framework based on C++11 文檔里面提供了各個系…

Holoens2開發報錯記錄02_通過主機獲取彩色和深度數據流常見錯誤

01.E1696 E1696 無法打開源文件 “stdio.h” 解決方法&#xff1a; 更新一下SDK 1&#xff09;打開Visual Studio Installer&#xff0c;點擊修改 2&#xff09;安裝詳細信息中自己系統對應的SDK&#xff0c;點擊修改即可 02.WinError 10060 方法來源 解決方法&#xff1a…

【Qt之QQuickWidget】QML嵌入QWidget中

由于我項目開始使用Widgets,換公司后直接使用QML開發&#xff0c;沒有了解過如何實現widget到qml過渡&#xff0c;恰逢面試時遇到一家公司希望從widget遷移到qml開發&#xff0c;詢問相關實現&#xff0c;一時語塞&#xff0c;很尷尬&#xff0c;粗略研究并總結下。 對qwidget嵌…

從單片機的啟動說起一個單片機到點燈發生了什么下——使用GPIO點一個燈

目錄 前言 HAL庫對GPIO的抽象 核心分析&#xff1a;HAL_GPIO_Init 前言 我們終于到達了熟悉的地方&#xff0c;對GPIO的初始化。經過漫長的鋪墊&#xff0c;我們終于歷經千辛萬苦&#xff0c;來到了這里。關于GPIO的八種模式等更加詳細的細節&#xff0c;由于只是點個燈&am…

ESP32S3:解決RWDT無法觸發中斷問題,二次開發者怎么才能使用內部RTC看門狗中斷RWDT呢?

目錄 基于ESP32S3:解決RWDT無法觸發中斷問題引言解決方案1. 查看報錯日志2. 分析報錯及一步一步找到解決方法3.小結我的源碼基于ESP32S3:解決RWDT無法觸發中斷問題 引言 在嵌入式系統中,RWDT(看門狗定時器)是確保系統穩定性的重要組件。然而,在某些情況下,RWDT可能無法…

對計算機中緩存的理解和使用Redis作為緩存

使用Redis作為緩存緩存例子緩存的引入 Redis緩存的實現 使用Redis作為緩存 緩存 ?什么是緩存&#xff0c;第一次接觸這個東西是在考研學習408的時候&#xff0c;計算機組成原理里面學習到Cache緩存&#xff0c;用于降低由于內存和CPU的速度的差異帶來的延遲。它是在CPU和內存…

vue3的實用工具庫@vueuse/core

1.什么是vueuse/core 是一個基于 ?Vue Composition API? 開發的實用工具庫&#xff0c;旨在通過封裝高頻功能為可復用的組合式函數&#xff08;Composables&#xff09;&#xff0c;簡化 Vue 應用的開發流程。 提供 ?200 開箱即用的函數?&#xff0c;覆蓋狀態管理、瀏覽器…

基于SSM的《計算機網絡》題庫管理系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘 要 《計算機網絡》題庫管理系統是一種新穎的考試管理模式&#xff0c;因為系統是用Java技術進行開發。系統分為三個用戶進行登錄并操作&#xff0c;分別是管理員、教師和學生。教師在系統后臺新增試題和試卷&#xff0c;學生進行在線考試&#xff0c;還能對考生記錄、錯題…

C++初階——簡單實現stack和queue

目錄 1、Deque(了解) 1.1 起源 1.2 結構 1.3 優缺點 1.4 應用 2、Stack 3、Queue 4、Priority_Queue 注意&#xff1a;stack&#xff0c;queue&#xff0c;priority_queue是容器適配器(container adaptor) &#xff0c;封裝一個容器&#xff0c;按照某種規則使用&#…

第2課 樹莓派鏡像的燒錄

樹莓派的系統通常是安裝在SD卡上的?。SD卡作為啟動設備,負責啟動樹莓派并加載操作系統。這種設計使得樹莓派具有便攜性和靈活性,用戶可以通過更換SD卡來更換操作系統或恢復出廠設置。 燒錄樹莓派的鏡像即是將樹莓派鏡像燒錄到SD卡上,在此期間會格式化SD卡,如果SD卡…

【Unity】URP管線Shader編程實例詳解 (1) : 漩渦效果shader

作者說 本系列教程適用于有編程基礎和圖形學基礎知識的讀者.如果對您有所幫助&#xff0c;請點個免費的贊和關注&#xff0c;您的支持就是我更新最大的動力&#xff01;如果你有任何想看的內容歡迎評論區留言&#xff01;本系列教程Github : https://github.com/Sky0Master/Un…

如何安裝vm 和centos

安裝 VMware Workstation&#xff08;以 Windows 系統為例&#xff09; 1. 下載 VMware Workstation 打開 VMware 官方網站&#xff08;Desktop Hypervisor Solutions | VMware &#xff09;&#xff0c;在頁面中選擇適合你系統的版本進行下載。如果你是個人非商業使用&#x…

STM32-心知天氣項目

一、項目需求 使用 ESP8266 通過 HTTP 獲取天氣數據&#xff08;心知天氣&#xff09;&#xff0c;并顯示在 OLED 屏幕上。 按鍵 1 &#xff1a;循環切換今天 / 明天 / 后天天氣數據&#xff1b; 按鍵 2 &#xff1a;更新天氣。 二、項目框圖 三、cjson作用 https://gi…

Wireshark簡單教程

1.打開Wireshark,點擊最上面欄目里面的“捕獲”中的“選項” 2.進入網卡選擇界面,選擇需要捕獲的選擇&#xff0c;這里我選擇WLAN 3.雙擊捕獲選擇出現下面界面 4.點擊如下圖紅方框即可停止捕獲 5.點擊下圖放大鏡可以進行放大 6.你也可以查詢tcp報文如下圖

【Http和Https區別】

概念&#xff1a; 一、Http協議 HTTP&#xff08;超文本傳輸協議&#xff09;是一種用于傳輸超媒體文檔&#xff08;如HTML&#xff09;的應用層協議&#xff0c;主要用于Web瀏覽器和服務器之間的通信。http也是客戶端和服務器之間請求與響應的標準協議&#xff0c;客戶端通常…