首頁 >後端開發 >C++ >C 17 中引入了哪些主要新功能和增強功能?

C 17 中引入了哪些主要新功能和增強功能?

Barbara Streisand
Barbara Streisand原創
2024-12-11 17:17:11664瀏覽

What are the Key New Features and Enhancements Introduced in C  17?

C 17 有哪些新功能?

C 17 引入了一系列新功能和語言改進,包括:

  • 語言特點:

    • 類別模板的模板參數推導
    • template 表示任何非類型模板參數類型的值
    • 修復非類型模板參數
    • 支援模板模板
    • 擴展折疊和...表達式
    • auto x{8} 作為整數
    • 現代化使用with ...和列表
    • Constexpr lambdas
    • 在lambdas 中捕獲此
    • 屬性,例如[[fallthrough]]、[[nodiscard]]、[[maybe_unused]]
    • 命名空間和枚舉器上的屬性
    • 使用避免重複屬性命名空間
    • 要求編譯器忽略它們無法識別的非標準屬性
    • 內聯變數
    • 命名空間別名(例如命名空間A::B)
    • 簡單的static_assert(表達式);沒有字串
    • 消除no throw 並將其替換為throw() 和noexcept(true)
  • 更乾淨的多重返回和流程控制:

    • 簡化多重回傳的結構化綁定value
    • if (init; condition) 和switch (init; condition) 用來擴展if 和switch 語句
    • 為哨兵和自訂迭代器泛化基於範圍的for 迴圈
    • if constexpr用於幾乎泛型程式碼
  • Misc:

    • 十六進位浮點文字
    • 十六進位浮點文字
    • 過度對齊的動態記憶體分配資料
    • 保證副本elision
    • 修復表達式的求值順序
    • 枚舉的直接列表初始化
    • 前向進度保證(FPG)
    • 字元文字u8'U ', u8'T', u8'F', u8'8'
    • 模式系統中的 noexcept
    • __has_include用於測試頭檔包含錯誤
    • 指針轉換數組修復
    • 繼承構造函數的修復並通過繼承進行聚合初始化
  • std類型的實用函數雙關語
    • 庫新增:
      • std::標記的變體聯合類型
      • 對於可為空的值,std::可選
      • std::any 對於任何類型的值
      • std::string_view 作為字元陣列或子字串的引用
      • std::byte既不是整數也不是字符,而只是資料
    • 呼叫內容:

      • std::invoke 用於泛型函數呼叫
      • std::apply 用於將元組解包為函數呼叫
      • std::make_from_tuple 和std:: apply 用於物件建構
      • 函數呼叫的is_invocable、is_invocable_r 和invoke_result功能
    • 檔案系統TS v1:改良的檔案系統操作
    • 新演算法:
    • 線程: std::shared_mutex、atomic::is_always_lockfree 和scoped_lock::is_always_lockfree 和scoped_lock並行性TS v1: 演算法及相關的平行版本機械
    • 庫基礎TS v1:搜尋演算法、多態分配器(pmr)、取樣
    • 容器改良: try_emplace 和insert_or_assign、映射的拼接和集合,非常量.data()用於字串,非成員std::size、std::empty、std::data、容器中最小不完整的類型支援、連續迭代器「概念」、constexpr 迭代器、emplace 函數系列的更新建構子
    • 智慧型指標變更: 修正了unique_ptr 並調整了weak_from_this和共享自這個
    • 其他std 資料類型改進: 使用大括號構造std::tuple,可輕鬆複製的引用_包裝器
    • 其他:
    • C 17 函式庫是基於C11的C99

      保留給未來標準庫 std[0-9]
      • destroy、uninitialized_move、uninitialized_value_construct 和 uninitialized_default_construct等實用函數
      • 特殊數學函數
      • std::clamp()
      • GCD 和LCM 計算
      • 用於在析構函數中拋出的std::uncaught_exceptions
      • std::as_const 和std: :布林常數類型
      • std::void_t;和std::void_t;類型
      • std::owner_less;用於根據內容排序的智能指針
      • 對std::chrono
      • std::conjunction、std::disjunction、std::negation 的改良
      • std::not_fn
      • noexcept內的規則std
      • std::is_contigious_layout
      • 使用 std::to_chars進行高效能數位轉換與std::from_chars
    特徵:
  • 特徵:

    • 交換, is_aggregate, has_unique_object_representations

以上是C 17 中引入了哪些主要新功能和增強功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn