簡體   English   中英

C++17 有哪些新特性?

[英]What are the new features in C++17?

C++17 現在功能完整,所以不太可能經歷大的變化。 為 C++17 提出了數百個提案。

在 C++17 中,C++ 中添加了哪些特性?

當使用支持“C++1z”的 C++ 編譯器時,當編譯器更新到 C++17 時,哪些特性將可用?

語言特點:

模板和通用代碼

拉姆達

屬性

語法清理

更清潔的多回程和流量控制

  • 結構化綁定

    • 基本上,一流的std::tieauto
    • 示例:
      • const auto [it, inserted] = map.insert( {"foo", bar} );
      • 創建的變量itinserted從與推定的類型pair那個map::insert回報。
    • 適用於 tuple/pair-likes & std::array和相對扁平的結構
    • 標准中實際命名的結構化綁定
  • if (init; condition)switch (init; condition)

    • if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
    • if(decl)擴展到decl不能明智地轉換為 bool 的情況。
  • 泛化基於范圍的 for 循環

    • 似乎主要支持哨兵,或者與開始迭代器類型不同的結束迭代器,這有助於以空終止循環等。
  • 如果 constexpr

    • 很多需要的功能來簡化幾乎通用的代碼。

雜項

圖書館補充:

數據類型

調用東西

文件系統 TS v1

新算法

  • for_each_n

  • reduce

  • transform_reduce

  • exclusive_scan

  • inclusive_scan

  • transform_exclusive_scan

  • transform_inclusive_scan

  • 添加用於線程目的,即使您不使用線程也會暴露

穿線

上面或下面未涵蓋的(部分) 庫基礎知識 TS v1

容器改進

智能指針變化

其他std數據類型改進:

雜項

性狀

已棄用

Isocpp.org 擁有自 C++14 以來的獨立變更列表; 它已被部分掠奪。

自然地,TS 工作並行繼續,因此有些 TS 還不夠成熟,必須等待下一次迭代。 下一次迭代的目標是之前計划的 C++20,而不是一些傳言暗示的 C++19。 已避免使用 C++1O。

這個 reddit 帖子這個 reddit 帖子中獲取的初始列表,通過谷歌搜索或從上面的 isocpp.org 頁面添加了鏈接。

SD-6功能測試列表中掠奪的其他條目。

clang 的功能列表庫功能列表即將被掠奪。 這似乎不可靠,因為它是 C++1z,而不是 C++17。

這些幻燈片在其他地方缺少一些功能。

雖然沒有詢問“刪除了什么”,但這里列出了在 C++17 中從 C++ 中刪除的一些內容((大部分?)以前已棄用):

刪除:

有改寫。 我不確定這些是否對代碼有任何影響,或者它們是否只是標准中的清理:

尚未整合到上面的論文:

  • P0505R0 (constexpr 計時)

  • P0418R2 (原子調整)

  • P0512R0 (模板參數推導調整)

  • P0490R0 (結構化綁定調整)

  • P0513R0 (更改為std::hash

  • P0502R0 (並行異常)

  • P0509R1 (更新異常處理限制)

  • P0012R1 (使異常規范成為類型系統的一部分)

  • P0510R0 (變體限制)

  • P0504R0 (可選/變體/任何標簽)

  • P0497R0 (共享 ptr 調整)

  • P0508R0 (結構化綁定節點句柄)

  • P0521R0 (共享指針使用計數和唯一更改?)

規格變化:

進一步參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM