ユーティリティライブラリ
C++には、ビットカウントから部分関数適用まで、さまざまな機能を提供する多様なユーティリティライブラリが含まれています。これらのライブラリは、大まかに2つのグループに分けられます。
- 言語サポートライブラリ、および
- 汎用ライブラリです。
目次 |
[編集] 言語サポート
言語サポートライブラリは、言語機能と密接に連携し、一般的な言語イディオムをサポートするクラスと関数を提供します。
[編集] 実装プロパティ (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 型の結果を生成する(カスタマイゼーションポイントオブジェクト) |
operator<=> が利用できなくても、三方比較を行い std::strong_ordering 型の結果を生成する(カスタマイゼーションポイントオブジェクト) | |
| (C++20) |
operator<=> が利用できなくても、三方比較を行い std::weak_ordering 型の結果を生成する(カスタマイゼーションポイントオブジェクト) |
operator<=> が利用できなくても、三方比較を行い std::partial_ordering 型の結果を生成する(カスタマイゼーションポイントオブジェクト) | |
[編集] コルーチンサポート (C++20以降)
コルーチンサポートのための型(例: std::coroutine_traits, std::coroutine_handle)。
[編集] 契約サポート (C++26以降)
契約サポートのための型(例: std::contracts::contract_violation)。
[編集] 汎用ユーティリティ
[編集] スワップ
| ヘッダ
<utility> で定義 | |
| 2つのオブジェクトの値を交換する (関数テンプレート) | |
| (C++14) |
引数を新しい値で置き換え、その前の値を返す (関数テンプレート) |
| ヘッダ
<concepts> で定義 | |
| (C++20) |
2つのオブジェクトの値を交換する (カスタマイゼーションポイントオブジェクト) |
[編集] 型操作 (C++11以降)
| ヘッダ
<utility> で定義 | |
| (C++11) |
関数引数を転送し、型テンプレート引数を使用してその値カテゴリを維持する (関数テンプレート) |
| (C++23) |
指定された型テンプレート引数の式の値カテゴリとconst性にキャストするかのように関数引数を転送する (関数テンプレート) |
| (C++11) |
引数をxvalueに変換する (関数テンプレート) |
| (C++11) |
ムーブコンストラクタが例外を投げない場合に引数をxvalueに変換する (関数テンプレート) |
| (C++17) |
引数への const 参照を取得する (関数テンプレート) |
| (C++11) |
評価されない文脈で使用するために、テンプレート型引数のオブジェクトへの参照を取得する (関数テンプレート) |
| (C++23) |
列挙型をその基底となる型に変換する (関数テンプレート) |
[編集] 整数比較関数 (C++20以降)
| ヘッダ
<utility> で定義 | |
| 2つの整数値を比較し、符号付き負数が符号なし数より小さいことを保証する (関数テンプレート) | |
| (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) |
任意の CopyConstructible な型のインスタンスを保持するオブジェクト (クラス) |
[編集] ビットセット
| ヘッダー
<bitset> で定義 | |
| 固定長のビット配列を実装する (クラステンプレート) | |
[編集] ビット操作 (C++20以降)
ヘッダ <bit> は、個々のビットやビットシーケンスにアクセス、操作、処理するためのいくつかの関数テンプレートを提供します。スカラ型のバイトオーダー(エンディアン)は、std::endian 機能を通じて検査できます。
[編集] 関数オブジェクト (C++11以降)
部分関数適用(例: std::bind)と関連ユーティリティ: std::ref や std::placeholders のような束縛ユーティリティ、多態的な関数ラッパー: std::function、定義済みのファンクタ(例: std::plus, std::equal_to)、メンバへのポインタを関数に変換する std::mem_fn。
[編集] ハッシュサポート (C++11以降)
| ヘッダ
<functional> で定義 | |
| (C++11) |
ハッシュ関数オブジェクト (クラステンプレート) |
[編集] 関連項目
| ユーティリティライブラリのC言語ドキュメント
|