C++ 語言自從其誕生以來,經歷了多個版本的更新,每個版本都引入了新的特性和改進,目的是提升語言的表達能力、性能、安全性以及開發效率。下面是各個主要版本(從 C++98 到 C++20)的一些關鍵特性。
C++98 (1998年)
- ISO C++ 標準化:C++98 是第一個國際標準化的版本,定義了 C++ 語言的核心規范。
- STL(標準模板庫):在 C++98 中,STL 已經成為標準庫的一部分,提供了數據結構(如
vector
、list
、map
)和算法。 - 異常處理:C++98 規范了異常處理機制(
try
、catch
、throw
)。
C++03 (2003年)
- 小范圍改進:C++03 并沒有引入重大的新特性,而是主要進行了一些小的修正和澄清,修復了 C++98 中的一些錯誤和不一致性。
- 編譯器兼容性改進:增強了跨平臺的兼容性,避免了 C++98 中的一些模糊或不確定的行為。
C++11 (2011年)
C++11 是一個重大更新,帶來了大量的新特性,使得 C++ 更加強大和現代化。
- 自動類型推斷(
auto
):允許編譯器根據初始化表達式推斷變量類型。 - 范圍-based for 循環:簡化了遍歷容器的語法。
- 智能指針:引入了
std::unique_ptr
和std::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::optional
、std::variant
和std::any
:為處理空值、不同類型或不確定類型的值提供了標準庫支持。if
和switch
中的初始化語句:允許在if
或switch
語句中直接聲明變量。- 并發改進:
std::shared_mutex
引入了讀寫鎖(讀多寫少時有效)。 std::filesystem
:提供了文件系統操作的標準庫支持。std::string_view
:允許創建非擁有型的字符串視圖,避免了不必要的內存復制。
C++20 (2020年)
C++20 是一個具有革命性的更新,帶來了許多現代化的特性和語言增強。
- 概念(Concepts):引入了概念,提供了類型約束機制,讓模板編程更安全、可讀和可維護。
- 范圍庫(Ranges):為處理序列數據提供了更加高效和簡潔的方式,可以用
view
、action
等進行鏈式操作。 - 模塊(Modules):提供了比傳統頭文件更高效的代碼組織方式,減少了編譯時間。
- 協程(Coroutines):支持協程,讓異步編程更加簡單直觀。
- 三向比較操作符(Spaceship Operator
<=>
):引入了三向比較符號,簡化了比較操作符的定義,尤其在排序時非常有用。 consteval
和constinit
:增強了對常量表達式和常量初始化的支持。std::format
:提供了類似 Python 的字符串格式化方法。std::span
:提供了一個輕量級的視圖類,用于處理數組或容器的子集。
C++23 (2023年)
C++23 繼續增強了語言的現代化和開發效率,主要改進包括:
- 增強的范圍庫:范圍庫得到進一步擴展和優化,增加了更多實用的操作符和功能。
std::expected
:類似于std::optional
,但可以表示期望的結果,包含成功或失敗的狀態。constexpr
擴展:支持更多的標準庫函數和語言特性在編譯時計算。- 正則表達式改進:引入了更高效和更靈活的正則表達式 API。
- 提高的標準庫支持:增加了更多的標準庫函數、算法和容器的優化。
總結
C++ 的每個版本都在逐步提升語言的表達能力、開發效率和執行性能。從 C++98 到 C++20,我們可以看到語言逐步引入了現代編程的諸多特性,如自動化內存管理、并發支持、類型系統改進、以及更易用的標準庫。這些特性不僅增強了語言的功能性,也使得 C++ 編程變得更加靈活和高效。