本页使用了标题或全文手工转换

C++17

维基百科,自由的百科全书
跳到导航 跳到搜索

C++17又稱C++1z,是C++的現行標準的非正式名稱,正式名稱為"International Standard ISO/IEC Programming Language C++"。C++17旨在作為大型擴充功能,最終的投票期將於2017年結束。

目前不少著名C++編譯器已支持C++17仍未定案的草案(draft),例如最新的GCC6已支持C++ concept的C++事务型内存(Transactional Memory),Visual Studio與Clang目前都提供了modules。

新功能[编辑]

  • 靜態斷言static_assert無需提供出錯信息[1]
  • 新增std::basic_string_view, 對外部字元序列或字串片斷(string-slice)的引用[2]
  • 移除 trigraphs[3][4]
  • 具有模板形式的模板(template template)参数允许使用 typename(之前仅允许使用 class)[5]
  • auto之新規定並簡化在括弧內初始化的定義[6][7]
  • 嵌套的 namespace的定義[7][8]
  • std::uncaught_exceptions 取代 std::uncaught_exception[9][10]
  • 支持UTF-8字元[10][11]
  • 变长参数模板的Folding运算[10][12]
  • std::mapstd::unordered_map增加了基于结点的插入操作[13][14]
  • 容器存取操作表示方法的统一化(Uniform container access)[14][15]
  • 连续型迭代器(Contiguous Iterators)[14][16]
  • ifswitch述句內的初始化
  • 基于boost::filesystem新增处理文件路径的std::filesystem[17]
  • 具有并行處理功能的STL 演算法[18]
  • 新增特殊數學函數[19]
  • 引进Library Fundamentals TS I中的内容[20]
  • std::variant,可作为型別安全(type-safe)的聯合所使用的容器(union container)
  • 編譯期靜態确定的 if判斷式if constexpr(expression)
  • 結構化綁定,允許auto [a, b] = getTwoReturnValues();
  • 簡化模板之建構函式,例如允許以pair(5.0, false) 取代pair<double,bool>(5.0, false)
  • 內聯式(Inline)變數,允許在標頭檔(header files)宣告變數

注釋[编辑]

  1. ^ N3928: Extending static_assert, v2 (Walter E. Brown) (PDF). [2015-07-16]. (原始内容存档 (PDF)于2015-08-11). 
  2. ^ std::basic_string_view - cppreference.com. en.cppreference.com. [2016-06-23]. (原始内容存档于2016-06-17). 
  3. ^ N3981: Removing trigraphs??! (Richard Smith). 2014-05-06 [2015-07-16]. (原始内容存档于2018-07-09). 
  4. ^ IBM comment on preparing for a Trigraph-adverse future in C++17 页面存档备份,存于互联网档案馆, IBM paper N4210, 2014-10-10. Authors: Michael Wong, Hubert Tong, Rajan Bhakta, Derek Inglis
  5. ^ N4051: Allow typename in a template template parameter (Richard Smith). [2015-07-16]. (原始内容存档于2015-08-11). 
  6. ^ N3922: New Rules for auto deduction from braced-init-list (James Dennett). [2015-07-16]. (原始内容存档于2015-08-10). 
  7. ^ 7.0 7.1 Updates to my trip report. [2015-07-16]. (原始内容存档于2015-03-19). 
  8. ^ N4230: Nested namespace definition (Robert Kawulak, Andrew Tomazos). [2015-07-16]. (原始内容存档于2015-08-03). 
  9. ^ N4259: Wording for std::uncaught_exceptions (Herb Sutter) (PDF). [2015-07-16]. (原始内容 (PDF)存档于2014-11-29). 
  10. ^ 10.0 10.1 10.2 New core language papers adopted for C++17. [2015-07-16]. (原始内容存档于2015-04-27). 
  11. ^ N4267: Adding u8 character literals (Richard Smith). [2015-07-16]. (原始内容存档于2015-10-28). 
  12. ^ N4295: Folding expressions (Andrew Sutton, Richard Smith). [2015-07-16]. (原始内容存档于2015-04-04). 
  13. ^ N4279: Improved insertion interface for unique-key maps (Thomas Köppe). [2015-07-16]. (原始内容存档于2015-04-27). 
  14. ^ 14.0 14.1 14.2 New standard library papers adopted for C++17. [2015-07-16]. (原始内容存档于2014-11-29). 
  15. ^ N4280: Non-member size() and more (Riccardo Marcangelo) (PDF). [2015-07-16]. (原始内容存档 (PDF)于2015-03-09). 
  16. ^ N4284: Contiguous Iterators (Jens Maurer). [2015-07-16]. (原始内容存档于2014-11-29). 
  17. ^ Filesystem Library Proposal (Beman Dawes). [2016-08-02]. (原始内容存档于2016-07-20). 
  18. ^ The Parallelism TS Should be Standardized. [2016-08-02]. (原始内容存档于2016-04-05). 
  19. ^ Mathematical Special Functions for C++17, v5 (PDF). [2016-08-02]. (原始内容存档 (PDF)于2016-04-05). 
  20. ^ Adopt Library Fundamentals V1 TS Components for C++17 (R1). [2016-08-02]. (原始内容存档于2016-04-05). 

另見[编辑]