具名要求
出自 cppreference.com
< cpp
本頁面所列的具名要求 (named requirements),是指 C++ 標準規範性文本中用來定義標準函式庫期望的具名要求。
確保函式庫模板在實例化時,其模板參數滿足這些要求,是程式設計師的責任。若未能滿足,可能會導致非常複雜的編譯器診斷訊息。
其中一些要求在 C++20 中透過 概念 (concepts) 語言特性進行了形式化。
基本 | ||
| 指定該型別的物件可以進行預設建構 (具名要求) | ||
| (C++11) |
指定該型別的物件可以由右值建構 (具名要求) | |
| 指定該型別的物件可以由左值建構 (具名要求) | ||
| (C++11) |
指定該型別的物件可以由右值賦值 (具名要求) | |
| 指定該型別的物件可以由左值賦值 (具名要求) | ||
| 指定該型別的物件可以被銷毀 (具名要求) | ||
類型屬性 | ||
| 注意:標準並未定義此子類別中指定名稱的具名要求。 這些是由核心語言定義的型別類別。在此處包含它們僅是為了保持一致性。 | ||
| 非陣列型別或類別型別的物件型別 (具名要求) | ||
| (C++20 中已棄用) |
POD (Plain Old Data) 型別,與 C 語言的 struct 相容 (具名要求) | |
| (C++11) |
這類型別的物件在複製其底層位元組後可以維持其值 (具名要求) | |
| (C++11)(在 C++26 中棄用) |
這類型別的物件可以被平凡建構與複製 (具名要求) | |
| (C++11) |
這些型別對於與其他程式語言編寫的程式碼進行通訊非常有用 (具名要求) | |
| 這類型別的物件可以被隱式創建,且其生命週期可以隱式開始 (具名要求) | ||
全函式庫通用 | ||
| 布林運算 (operator&&, operator||, 及 operator!) 具有通常的語意 (具名要求) | ||
operator== 是一種等價關係(具名要求) | ||
operator< 是一種嚴格弱序關係(具名要求) | ||
| 可以透過非限定的非成員函式呼叫 swap() 進行交換 (具名要求) | ||
| (C++11) |
一種 LegacyIterator,解參考後得到一種 Swappable 型別 (具名要求) | |
| (C++11) |
支援空值的指標類型別 (具名要求) | |
| (C++11) |
一種 FunctionObject,對於不同的輸入值,產生相同輸出的機率很低 (具名要求) | |
| 包含分配資訊的類別型別 (具名要求) | ||
| 可以使用函式呼叫語法來呼叫的物件 (具名要求) | ||
| 定義了 invoke 操作的型別 (具名要求) | ||
| 一種 FunctionObject,對於一個參數,回傳一個可轉換為 bool 的值且不修改參數 (具名要求) | ||
| 一種 FunctionObject,對於兩個參數,回傳一個可轉換為 bool 的值且不修改參數 (具名要求) | ||
| 一種 BinaryPredicate,確立了一種排序關係 (具名要求) | ||
容器 (Container) | |
| 允許使用迭代器存取元素的資料結構 (具名要求) | |
| 使用雙向迭代器的容器 (具名要求) | |
| 使用配置器 (allocator) 的容器 (具名要求) | |
| 元素線性儲存的容器 (具名要求) | |
| (C++17) |
元素儲存在相鄰記憶體位址的容器 (具名要求) |
| 透過將元素與鍵關聯來儲存元素的容器 (具名要求) | |
| 透過將元素關聯到鍵並儲存在桶 (bucket) 中的容器 (具名要求) | |
容器元素 | |
| (C++11) |
元素可以在未初始化的儲存區中被預設建構 (具名要求) |
| (C++11) |
元素可以在未初始化的儲存區中被複製建構 (具名要求) |
| (C++11) |
元素可以在未初始化的儲存區中被移動建構 (具名要求) |
| (C++11) |
元素可以在未初始化的儲存區中被建構 (具名要求) |
| (C++11) |
元素可以使用配置器銷毀 (具名要求) |
迭代器 (Iterator) | |
| 存取某種資料結構內資料的通用概念 (具名要求) | |
| 可用於讀取資料的迭代器 (具名要求) | |
| 可用於寫入資料的迭代器 (具名要求) | |
| 可用於多次讀取資料的迭代器 (具名要求) | |
| 可以遞增與遞減的迭代器 (具名要求) | |
| 可以在常數時間內推進的迭代器 (具名要求) | |
| 指向連續分配元素的迭代器 (具名要求) | |
| 可在常數運算式求值期間使用的迭代器 (具名要求) | |
串流 I/O 函式 | |
| 一種不跳過前導空白並計算已處理字元數的串流輸入函式 (具名要求) | |
| 一種會跳過前導空白的串流輸入函式 (具名要求) | |
| 一種基本的串流輸出函式 (具名要求) | |
| 一種在發生錯誤時設置 failbit 並回傳串流參考的串流輸出函式 (具名要求) | |
格式化器 | |
| (C++20) |
為給定的格式化參數型別和字元型別抽象出格式化操作 (具名要求) |
| (C++20) |
定義由 格式化函式庫 使用的函式 (具名要求) |
隨機數生成 | |
| (C++11) |
消耗整數序列並產生 32 位元無符號值序列 (具名要求) |
| 回傳均勻分佈的隨機無符號整數 (具名要求) | |
| (C++11) |
一種由種子定義的決定性 UniformRandomBitGenerator (具名要求) |
| 一種轉換另一個 RandomNumberEngine 輸出的 RandomNumberEngine (具名要求) | |
| 回傳根據給定數學機率密度函式分佈的隨機數 (具名要求) | |
並行 (Concurrency) | |
| (C++11) |
為執行代理(即執行緒)提供排他性擁有權語意 (具名要求) |
| (C++11) |
一種支援嘗試獲取鎖的 BasicLockable (具名要求) |
| (C++11) |
一種支援定時鎖獲取的 Lockable (具名要求) |
| (C++14) |
為執行代理(即執行緒)提供共享擁有權語意 (具名要求) |
| 一種支援定時鎖獲取的 SharedLockable (具名要求) | |
| (C++11) |
一種防止資料競爭並保證順序一致性同步的 Lockable (具名要求) |
| (C++11) |
一種防止資料競爭並保證順序一致性同步的 TimedLockable (具名要求) |
| (C++17) |
一種支援共享擁有權語意的 Mutex (具名要求) |
| (C++14) |
一種支援共享擁有權語意的 TimedMutex (具名要求) |
範圍 (Ranges) | |
| (C++20) |
一種 FunctionObject,能從 viewable_range 和額外參數創建 範圍適配器 (range adaptor)(具名要求) |
| 一種支援管線運算子 (pipe operator) 的 FunctionObject (具名要求) | |
多維視圖自訂 | |
| (C++23) |
控制 mdspan 中多維索引的映射 (具名要求) |
| (C++23) |
一種持有 LayoutMapping 要求的策略 (具名要求) |
| (C++23) |
一種控制 mdspan 中資料控制代碼存取的策略 (具名要求) |
其他 | |
| (C++11) |
描述型別的屬性 (具名要求) |
| (C++11) |
描述兩個型別之間的關係 (具名要求) |
| (C++11) |
修改型別的屬性 (具名要求) |
| (C++11) |
聚合了時長 (duration)、時間點 (time point) 以及獲取當前時間點的函式 (具名要求) |
| (C++11) |
一種不會拋出異常的 Clock (具名要求) |
| 為字元型別定義型別和函式 (具名要求) | |
| 位元集、整數或枚舉 (具名要求) | |
| 一種其初始化效果等同於賦值的型別 (具名要求) | |
| (C++11) |
定義由 正規表達式函式庫 使用的型別和函式 (具名要求) |
| (C++11) |
具有 constexpr 建構函式的型別 (具名要求) |
| 本節尚不完整 原因:是否還有其他遺漏的要求? |