什么是 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
來自:http://www.masalaanews.com/
http://www.oschina.net/news/85129/top-19-new-features-of-c17-you-need-to-know