Home People Research Blog Courses Links Search Download
NCHC

Blog

Blog 最新文章

  1. Visual Studio 的遠端偵錯:Windows
    2021/03/24 14:45
  2. Visual Studio 2019 16.9 支援使用 OpenMP LLVM
    2021/03/03 13:52
  3. Valve 推出完全支援 OpenXR 的 SteamVR 1.16.8
    2021/02/25 09:43

Blog 最新回應

  1. 加入斜體文字...
    2021/02/07 21:06
  2. 加入斜體文字...
    2021/02/07 21:06
  3. 加入斜體文字...
    2021/02/07 21:06

Keyword 關鍵字

Python VR OpenCL svn CUDA C++17 C++20 HTC Vive Pro Valve Index OpenGL iFlyover Kinect Docker Windows MR 開放資料 Java Oculus javascript OpenNI 開放資料 3D立體 CubeX OpenNI2 OpenVR C++14 Vulkan C++14 NiTE2 MR HoloLens 2 VR Oculus Quest 2 WebGL Oculus Rift S Pandas OpenXR PHP Pandas Qt ASUS Xtion C++ Boost xml 3d print C++11 HTC Vive GitLab Docker git 資訊地圖 OpenCV OpenMP 資料視覺化 Python HTC Vive Focus

類別:技術相關 » 技術研究
文章發表|我要回應|RSS訂閱

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
  • constexpr ification:
    • constinit, consteval, std::is_constant_evaluated, constexpr allocation, constexpr std::vector, constexpr std::string, constexpr union, constexpr try and catch, constexpr dynamic_cast and typeid.
  • 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(參考)

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

張貼者:heresy於2020/02/19 10:21 上午有0則回應,瀏覽次數:189次

-- TOP --

我要回應
* 身份  訪客 (暱稱:)
 本篇文章作者 (帳號:密碼:)
* 內容      
很高興 悲傷 震驚 疑惑 大笑 發瘋 傷心
* 留言密碼 (請輸入下方圖片中去除前、後位數的數字,共五碼。)
說明 1. * 表示必填欄位。
2. 不支援HTML Tag。
   

-- TOP --

© Visualization and Interactive Media Laboratory of NCHC, 2007 - 2021, All Rights Reserved. Contact E-mail