1. 程式人生 > >你需要了解的 C++ 17 Top 19 新特性

你需要了解的 C++ 17 Top 19 新特性

什麼是 C++17?

C++17(或 C++1z)是繼 C++14 之後 C++ 程式語言 ISO/IEC 標準的下一次修訂的非正式名稱。C++17 現在功能已齊全,正在成為國際標準的路上。它的規範已於 2017 年 3 月達到國際標準草案的階段。

C++17 標準化圖表

年份 C++ 標準 正式名稱
1998 ISO/IEC 14882:1998 C++98
2003 ISO/IEC 14882:2003 C++03
2011 ISO/IEC 14882:2011 C++11
2014 ISO/IEC 14882:2014 C++14
2017 Yet to be determined C++17
2020 Yet to be determined C++20

C++17 的 19 個新特性

  1. 使 static_assert 的文字資訊可選

  2. 刪除 trigraphs

  3. 在模板引數中允許使用 typename(作為替代類)

  4. 來自 braced-init-list 的新規則用於自動推導

  5. 巢狀名稱空間的定義,例如:使用 namespace X::Y { … } 代替 namespace X { namespace Y { … }}

  6. 允許名稱空間和列舉器的屬性

  7. 新的標準屬性:[[fallthrough]], [[maybe_unused]] 和 [[nodiscard]]

  8. UTF-8 字元文字

  9. 對所有非型別模板引數進行常量評估

  10. Fold 表示式,用於可變的模板

  11. A compile-time static if with the form if constexpr(expression)

  12. 結構化的繫結宣告,現在允許 auto [a, b] = getTwoReturnValues();

  13.  if 和 switch 語句中的初始化器

  14. 在某些情況下,確保通過編譯器進行 copy elision(Guaranteed copy elision by compilers in some cases)

  15.  一些用於對齊記憶體分配的擴充套件

  16. 建構函式的模板推導,允許使用 std::pair(5.0, false) 代替 std::pair<double,bool>(5.0, false)

  17. 內聯變數,允許在標頭檔案中定義變數

  18. __has_include,允許由預處理程式指令檢查標頭檔案的可用性

  19. __cplusplus 的值更改為 201703L

轉載自:https://www.cnblogs.com/findumars/p/6901429.html