實用工具庫
C++ 包含各種實用工具庫,提供從位計數到區域性函式應用的功能。這些庫大致分為兩組
- 語言支援庫,以及
- 通用庫。
目錄 |
[編輯] 語言支援
語言支援庫提供與語言特性密切互動並支援常見語言慣用法的類和函式。
[編輯] 實現屬性 (C++20起)
標頭檔案 <version> 提供有關 C++ 標準庫的實現相關資訊(例如版本號和釋出日期)。它還定義了庫特性測試宏。
[編輯] 型別支援
基本型別(例如 std::size_t, std::nullptr_t),RTTI(例如 std::type_info)
[編輯] 程式實用工具
終止(例如 std::abort, std::atexit),環境(例如 std::system),訊號(例如 std::raise)。
[編輯] 動態記憶體管理
智慧指標(例如 std::shared_ptr),分配器(例如 std::allocator 或 std::pmr::memory_resource),C 風格記憶體管理(例如 std::malloc)。
[編輯] 錯誤處理
異常(例如 std::exception, std::terminate),斷言(例如 assert)。
[編輯] 可變引數函式
支援接受任意數量引數的函式(透過例如 va_start, va_arg, va_end)。
[編輯] 初始化列表 (C++11起)
| 定義於標頭檔案
<initializer_list> | |
| (C++11) |
引用在列表初始化中建立的臨時陣列 (類模板) |
[編輯] 原始碼資訊捕獲 (C++20起)
| 定義於標頭檔案
<source_location> | |
| (C++20) |
一個表示原始碼資訊的類,例如檔名、行號和函式名 (類) |
[編輯] 三路比較 (C++20起)
| 定義於標頭檔案
<compare> | |
| 指定運算子 <=> 在給定型別上產生一致的結果 (概念) | |
| (C++20) |
支援所有6個運算子,不可替換,並允許不可比較值的三路比較的結果型別 (類) |
| (C++20) |
支援所有6個運算子但不可替換的三路比較的結果型別 (類) |
| (C++20) |
支援所有6個運算子並且可替換的三路比較的結果型別 (類) |
| 命名比較函式 (函式) | |
| (C++20) |
實現 x <=> y 的受限函式物件 (類) |
| (C++20) |
獲取給定型別上三路比較運算子 <=> 的結果型別 (類模板) |
| (C++20) |
所有給定型別都能轉換成的最強比較類別 (類模板) |
| (C++20) |
執行三向比較並生成型別為 std::strong_ordering 的結果(自定義點物件) |
| (C++20) |
執行三向比較並生成型別為 std::weak_ordering 的結果(自定義點物件) |
| (C++20) |
執行三路比較併產生 std::partial_ordering 型別的結果(自定義點物件) |
執行三路比較併產生 std::strong_ordering 型別的結果,即使 operator<=> 不可用(自定義點物件) | |
| (C++20) |
執行三路比較併產生 std::weak_ordering 型別的結果,即使 operator<=> 不可用(自定義點物件) |
執行三向比較並生成型別為 std::partial_ordering 的結果,即使 operator<=> 不可用(自定義點物件) | |
[編輯] 協程支援 (C++20起)
協程支援的型別(例如 std::coroutine_traits, std::coroutine_handle)。
[編輯] 契約支援 (C++26起)
契約支援的型別(例如 std::contracts::contract_violation)。
[編輯] 通用實用工具
[編輯] 交換
| 在標頭檔案
<utility> 中定義 | |
| 交換兩個物件的值 (函式模板) | |
| (C++14) |
用新值替換引數並返回其舊值 (函式模板) |
| 定義於標頭檔案
<concepts> | |
| (C++20) |
交換兩個物件的值 (自定義點物件) |
[編輯] 型別操作 (C++11起)
| 在標頭檔案
<utility> 中定義 | |
| (C++11) |
轉發函式引數並使用型別模板引數來保留其值類別 (函式模板) |
| (C++23) |
轉發函式引數,如同將其轉換為指定型別模板引數的值類別和 constness (函式模板) |
| (C++11) |
將引數轉換為亡值 (函式模板) |
| (C++11) |
如果移動建構函式不丟擲異常,則將引數轉換為亡值 (函式模板) |
| (C++17) |
獲取其引數的 const 引用 (函式模板) |
| (C++11) |
獲取模板型別引數物件的引用,用於未求值上下文 (函式模板) |
| (C++23) |
將列舉轉換為其底層型別 (函式模板) |
[編輯] 整數比較函式 (C++20起)
| 在標頭檔案
<utility> 中定義 | |
| 比較兩個整數值,確保有符號負數小於無符號數 (函式模板) | |
| (C++20) |
檢查整數值是否在給定整數型別的範圍內 (函式模板) |
[編輯] 關係運算符 (直到 C++20)
| 在標頭檔案
<utility> 中定義 | |
| 定義於名稱空間
std::rel_ops | |
| (C++20 中已棄用) |
根據使用者定義的 operator== 和 operator< 自動生成比較運算子 (函式模板) |
[編輯] 構造標籤 (C++11起)
| 在標頭檔案
<utility> 中定義 | |
| 分段構造標籤 (標籤) | |
| 原地構造標籤 (標籤) | |
| (C++26) |
值構造標籤 (標籤) |
[編輯] 對與 元組
| 在標頭檔案
<utility> 中定義 | |
| 實現二元組,即一對值 (類模板) | |
| 定義於標頭檔案
<tuple> | |
| (C++11) |
實現固定大小容器,容納可能不同型別的元素 (類模板) |
| (C++17) |
使用引數元組呼叫函式 (函式模板) |
| (C++17) |
用元組引數構造物件 (函式模板) |
元組協議 (C++11起) | |
| 定義於標頭檔案
<tuple> | |
| 在標頭檔案
<utility> 中定義 | |
| 定義於標頭檔案
<array> | |
| 定義於標頭檔案
<ranges> | |
| 定義於標頭檔案
<complex> | |
| (C++11) |
獲取類元組型別元素的數量 (類模板) |
| (C++11) |
獲取類元組型別的元素型別 (類模板) |
[編輯] 求和型別和型別擦除包裝器 (C++17起)
| 定義於標頭檔案
<optional> | |
| (C++17) |
可能包含或不包含物件的包裝器 (類模板) |
| 定義於標頭檔案
<expected> | |
| (C++23) |
一個包裝器,包含預期值或錯誤值 (類模板) |
| 定義於標頭檔案
<variant> | |
| (C++17) |
一種型別安全的帶判別聯合體 (類模板) |
| 定義於標頭檔案
<any> | |
| (C++17) |
儲存任意 可複製構造 型別例項的物件 (類) |
[編輯] 位集
| 定義於標頭檔案
<bitset> | |
| 實現固定長度位陣列 (類模板) | |
[編輯] 位操作 (C++20起)
標頭檔案 <bit> 提供了多個函式模板用於訪問、操作和處理單個位和位序列。可以透過 std::endian 工具檢查標量型別的位元組序(endianness)。
[編輯] 函式物件 (C++11起)
區域性函式應用(例如 std::bind)及相關實用工具:繫結實用工具如 std::ref 和 std::placeholders,多型函式包裝器:std::function,預定義函式物件(例如 std::plus, std::equal_to),成員指標到函式轉換器 std::mem_fn。
[編輯] 雜湊支援 (C++11起)
| 定義於標頭檔案
<functional> | |
| (C++11) |
雜湊函式物件 (類模板) |
[編輯] 另請參閱
| C 文件 用於 實用工具庫
|