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 裡,以 const […]
讚讚
[…] C++20 的時候,針對 chrono […]
讚讚
[…] 曾經寫過 C++11 加入的 std::chrono 這個時間函式庫的介紹。而後來在 C++20 的時候,則又有在裡面追加「日曆」(calendar)喊「時區」(time […]
讚讚
[…] signed 和 unsigned 兩者間比較,該怎麼辦呢?雖然個人覺得不算直覺,但是 C++20 在 <utility> 中,其實提供了一系列的 cmp_xxx() […]
讚讚
[…] C++11 開始、到現在的 C++20,一些針對 C++ […]
讚讚
[…] MSVC 的 STL 終於在 /std:c++20 這個編譯參數下、完整支援 C++20 […]
讚讚
[…] boost format 可以整到 std 裡面變成標準,不過很遺憾的是,C++ 20 雖然加入了 format 函式庫,但是卻不是基於 Boost format、而是基於 {fmt} […]
讚讚