首頁  >  文章  >  後端開發  >  `std` 命名空間中的哪些模板不能在 C 中專門化?

`std` 命名空間中的哪些模板不能在 C 中專門化?

Barbara Streisand
Barbara Streisand原創
2024-10-31 20:13:02239瀏覽

 What Templates in the `std` Namespace Cannot Be Specialized in C  ?

命名空間std 專業化的限制

簡介

st至關重要,容納基本庫和模板。但是,使用者可能想知道此命名空間中允許和禁止的自訂之間的界限在哪裡。本文將闡明 std 中無法特化的模板。

禁止的模板

根據 C 標準,std 中的某些模板無法明確特化。其中包括:

  • numeric_limits:禁止非算術標準型別(例如複雜
  • shared_ptr
  • 和LessThanComparability
  • weak_ptr
  • :需要 CopyConstructibility 和 CopyAssignability
  • std::hash
  • :專業化必須滿足哈希類要求🎜>
  • :為本子條款中的任何類別模板添加專業化的未定義行為(有限的 common_type專業化除外)
  • Locales:某些存在所需的專業化
  • istreambuf_iterator:需要簡單的複製構造函數、constexpr預設建構函式和簡單的析構函式
  • complex:使用其他型別實例化時未定義的效果比float、double 或long double
  • atomic :需要刪除的複製建構子、刪除的複製賦值運算子和constexpr值建構子
  • unary_functionbinary_function:已棄用;不能特化

一般限制🎜>一般限制🎜>一般限制🎜>一般限制🎜>一般限制🎜>一般限制🎜>一般限制🎜>一般限制🎜>一般限制🎜>一般限制🎜>除了禁止的模板之外,C標準也強調以下限制:

它是除非明確指定,否則在 std 或其子命名空間中聲明或定義任何內容的未定義行為。
  • 只有當專業化依賴使用者定義的類型並滿足原始範本的標準要求時,才可以將其新增至 std。
  • 禁止明確特化 std 函式庫類別的成員函式、成員函式範本或成員類別範本。
  • 僅當依賴使用者定義的類型名稱並符合標準時才允許明確實例化對原始範本的要求。

以上是`std` 命名空間中的哪些模板不能在 C 中專門化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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