C++ 在繼 C++17 之後,下一個新的標準 C++20 終於定案了!Heresy 看到的主要是《2020-02 Prague ISO C++ Committee Trip Report — C++20 is Done! 》這篇文章。
在文章中,他列了一些值得注意的 C++ 20 新功能如下:
constexpr
ification:std::format("For C++{}", 20)
operator<=>
- Feature test macros
std::span
- Synchronized output
std::source_location
std::atomic_ref
std::atomic::wait, std::atomic::notify, std::latch, std::barrier, std::counting_semaphore, etc
std::jthread and std::stop_*
其中,Modules、Coroutines、Concepts、Ranges 這四項,應該是這次主要的更新重點,在 Modernes C++ 這個網站也被稱為「The Big Four」(參考)。這邊大致簡單說明一下:
-
Concepts(參考)
-
Coroutines(參考)
應該是 cooperation routine 的合成字,基本上應該算是一種可以中斷、並繼續的函式。個人還不太清楚到底該怎麼用?不過主要用途似乎是可以在不需要額外使用 thread 的情況下、來撰寫事件導向的程式。
目前 g++10、CLang 10 都是局部支援。
-
Modules(參考、參考)
把程式、函式庫更好的模組化方法。
可以提供更快的編譯速度,而且可以不需要引用 header 檔,藉此避免 macro 的汙染。目前 CLang 10 和 MSVC 應該都是局部支援。
-
Ranges(參考、參考)
針對容器裡面的資料,做進一步的處理。
個人覺得重點應該是「Range adaptors」這個東西,可以針對容器做處理(例如篩選、分割、合併)。目前沒有編譯器支援。
除此之外,個人比較在意的還有新的 std::format 這個新的格式化函式庫。
讓個人覺得比較難過的,是他採用的應該是 {fmt} 這個函式庫(GitHub)、而不是 Boost Format;所以如果之後要盡量使用標準函式庫的話,大概就得修改既有程式了…
雖然標準已經訂製好了,但是考慮到現在的支援度(C++ compiler support),實際上能馬上用上的應該不多;真的要開始使用,可能都還須要等一段時間才合適了。
而也由於很多新功能都還不能真的玩,所以大概短時間也還不會寫相關的介紹吧。 ^^"
另外,下一個標準,基本上應該會是「C++ 23」(參考),目前也已經在進行中了。
[…] 是 C++20 […]
讚讚
[…] C++20,STL 則是提供了「Synchronized Output […]
讚讚
[…] C++20 […]
讚讚
[…] comparison、參考)是 C++20 […]
讚讚
[…] initializers 是 C++20 新的一種針對物件的成員資料初始化的方法。他基本上是 aggregate […]
讚讚
[…] 的一些數值函式庫》,繼續來整理 C++17、C++20 […]
讚讚
[…] C++ 最新的正式標準、C++ 20 在去年年初就已經正式定案了,當時 Heresy 也有稍微記錄過;其中,也有針對 concepts 和 template lambda […]
讚讚
[…] C++20,則是又加入了「template parameter for […]
讚讚
[…] C++20 完整功能的 16.10 正式版本了!官方的公告是:《Visual Studio 2019 v16.10 and […]
讚讚
C++20 approved, C++23 meetings and schedule update
https://herbsutter.com/2020/09/06/c20-approved-c23-meetings-and-schedule-update/
讚讚