C++20 正式定案!


C++ 在繼 C++17 之後,下一個新的標準 C++20 終於定案了!Heresy 看到的主要是《2020-02 Prague ISO C++ Committee Trip Report — C++20 is Done! 》這篇文章。

在文章中,他列了一些值得注意的 C++ 20 新功能如下:

其中,Modules、Coroutines、Concepts、Ranges 這四項,應該是這次主要的更新重點,在 Modernes C++ 這個網站也被稱為「The Big Four」(參考)。這邊大致簡單說明一下:

  • Concepts(參考

    主要用途是幫 template 再額外加上需求的描述、讓編譯器以及開發者可以更明確地了解 template 函式或類別在使用上的需求與限制。
    這部分 Heresy 在之前已經介紹過了()。

    目前 g++10、CLang 10、MSVC 19.23 都有支援(MSVC 局部)。

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

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.