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」(參考),目前也已經在進行中了。