你需要了解的 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 個新特性
-
使 static_assert 的文字資訊可選
-
刪除 trigraphs
-
在模板引數中允許使用 typename(作為替代類)
-
來自 braced-init-list 的新規則用於自動推導
-
巢狀名稱空間的定義,例如:使用 namespace X::Y { … } 代替 namespace X { namespace Y { … }}
-
允許名稱空間和列舉器的屬性
-
新的標準屬性:[[fallthrough]], [[maybe_unused]] 和 [[nodiscard]]
-
UTF-8 字元文字
-
對所有非型別模板引數進行常量評估
-
Fold 表示式,用於可變的模板
-
A compile-time static if with the form if constexpr(expression)
-
結構化的繫結宣告,現在允許 auto [a, b] = getTwoReturnValues();
-
if 和 switch 語句中的初始化器
-
在某些情況下,確保通過編譯器進行 copy elision(Guaranteed copy elision by compilers in some cases)
-
一些用於對齊記憶體分配的擴充套件
-
建構函式的模板推導,允許使用 std::pair(5.0, false) 代替 std::pair<double,bool>(5.0, false)
-
內聯變數,允許在標頭檔案中定義變數
-
__has_include,允許由預處理程式指令檢查標頭檔案的可用性
-
__cplusplus 的值更改為 201703L