首頁 > 後端開發 > C++ > C 17 中引入了哪些關鍵語言功能、函式庫新增和已棄用的元素?

C 17 中引入了哪些關鍵語言功能、函式庫新增和已棄用的元素?

Mary-Kate Olsen
發布: 2024-12-08 11:10:19
原創
501 人瀏覽過

What are the key language features, library additions, and deprecated elements introduced in C  17?

C 17 功能

C 17 為該語言引入了大量新功能,顯著擴展了其功能並增強了其可用性。這些新增內容涵蓋了語言的各個方面,從模板改進和 lambda 增強到庫添加和棄用元素。

語言功能

模板與通用程式碼:

  • 類別的模板參數推導模板: 構造函數現在構造函數現在可以推導模板參數,類似函數。
  • ;範本參數: 表示任何非型別模板參數類型的值。
  • 修訂非類型模板參數: 對非類型模板進行了一些修復和修訂

Lambda:

  • Constexpr Lambda: 如果Lambda滿足某些要求,現在可以明確標記為 constexpr .
  • 捕捉這個Lambda 函數: Lambda 函數現在可以捕獲 this 指針,從而允許訪問成員變數和方法。

屬性:

  • 新屬性: 屬性,例如[[fallthrough]、[nodiscard] 和[nodiscard]引入[[maybe_unused]] 是為了增強程式碼的清晰度和可讀性。
  • 命名空間和枚舉器上的屬性: 現在可以使用 [[attributes]] 將屬性套用於命名空間和枚舉器。

語法清理:

  • 內聯變數:現在可以內聯宣告變量,允許編譯器內聯其定義。
  • 簡化的命名空間聲明: 引入了命名空間 A::B 語法以簡化命名空間聲明。
  • 簡化的 static_assert: 現在可以在沒有字串參數的情況下使用 static_assert 語句。

乾淨的多重回傳與流程控制:

  • 結構化綁定: 結構化綁定可以更方便地在聲明中解包元組和其他資料結構。
  • 初始化的條件語句: if (init; condition) 和 switch (init;condition) 在條件語句中提供了更大的彈性。
  • 通用化基於範圍的 For 迴圈:基於範圍的 for 迴圈現在支援不同於以下的標記(結束迭代器):開始迭代器。
  • if constexpr: if constexpr 允許基於條件編譯關於編譯時常數。

其他:

  • 十六進位浮點文字:浮點文字現在可以以十六進位格式表示。
  • 過度對齊資料的動態記憶體分配:改進了對過度對齊的動態記憶體分配的支援資料。
  • 保證複製消除:某些不保證複製消除的場景現在有了明確的保證。
  • 改進的評估順序:某些表達式的求值順序規則已被修改,以便更清晰

庫新增

資料型態:

  • std::variant:多態可以保存多個替代值之一的值的類型類型。
  • std::可選: 表示可能包含或不包含值的可選值。
  • std::any: A可以保存任意值的類型擦除容器type.
  • std::string_view: 對字元序列的引用,類似const char*。
  • std::byte: A表示原始型別bytes.

實用程式:

  • 實用程式:
  • std::invoke:使用給定參數呼叫可呼叫函數,支援各種類型可呼叫物件。
  • std::apply: 解壓縮元組並將其元素作為參數傳遞給可呼叫物件。

std::invoke_result 和相關概念: 用於確定給定呼叫可呼叫物件的有效性和結果的概念和類型參數。

  • 檔案系統函式庫 (TS v1):

用於處理檔案系統、目錄和檔案的類別和函數。

  • 新演算法:
  • for_each_n
  • reduce
  • tra nsform_reduce
  • exclusive_scan
  • inclusive_scan
transform_exclusive_scan

transform_inclusive_scan

  • 執行緒:
  • std::shared_mutex:一種共享互斥鎖,允許多個讀取者但只允許一個寫入者。
  • atomic::is_always_lockfree: 指示原子型別是否在所有情況下都是無鎖的。

scoped_lock:: 鎖定多個互斥體同時簡化鎖定和解鎖。

  • (部分)庫基礎知識庫(TS v1):

執行搜尋和使用多態性的功能分配器。

  • 容器改進:
  • try_emplace 和 insert_or_assign:改進了處理特定場景的容器插入方法。

容器拼接:高效率之間移動節點

  • 智慧指標變更:

修復與🎜>修復與調整std::unique_ptr 和其他智慧指標。

額外改善:
  • 可簡單複製的 std::reference_wrapper: 提高了某些情況下的效能。
  • 更新了 C11 函式庫: C 17 標準函式庫基於 C11 ,提供與現代的相容性系統。
  • 已棄用的元素: 先前版本的 C 標準中的各種元素已被棄用。

C 1z 中的功能(預計適用於C 17)* *

確定C 1z 工作草案中的哪些功能將在C 17 中可用編譯器,建議查閱各個編譯器的文檔和發行說明。並非 C 1z 的所有功能都一​​致會在每個 C 17 編譯器中實作。

請注意,本摘要中並未提及所有變更或功能。如需完整列表,請參閱 C 17 標準文件或其他信譽良好的來源。

以上是C 17 中引入了哪些關鍵語言功能、函式庫新增和已棄用的元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板