型サポート (基本型、RTTI、型特性)
提供: cppreference.com
< cpp
(型システムの概要については型も参照してください)
目次 |
[編集] 基本的な型
[編集] 言語によって定義される基本型
[編集] 追加の基本的な型とマクロ
ヘッダ
<cstddef> で定義 | |
sizeof 演算子によって返される符号なし整数型 (typedef) | |
2つのポインタを減算したとき返される符号付き整数型 (typedef) | |
(C++11) |
ヌルポインタリテラル nullptr の型 (typedef) |
処理系定義のヌルポインタ定数 (マクロ定数) | |
(C++11) |
他のいかなるスカラー型より大きいまたは等しいアライメント要件を持つトリビアルな型 (typedef) |
標準レイアウト型の先頭から指定されたメンバまでのバイトオフセット (関数マクロ) | |
(C++17) |
バイト型 (列挙) |
ヘッダ
<cstdbool> で定義 (C++20未満) | |
ヘッダ
<stdbool.h> で定義 | |
__bool_true_false_are_defined (C++11)(C++17で非推奨) |
C 互換のマクロ定数。 整数リテラル 1 に展開されます (マクロ定数) |
ヘッダ
<cstdalign> で定義 (C++20未満) | |
ヘッダ
<stdalign.h> で定義 | |
__alignas_is_defined (C++11)(C++17で非推奨) |
C 互換のマクロ定数。 整数リテラル 1 に展開されます (マクロ定数) |
[編集] 固定幅の整数型 (C++11以上)
[編集] 数値限界
ヘッダ
<limits> で定義 | |
すべての基本数値型の性質を問い合わせるインタフェースを提供します (クラステンプレート) |
[編集] C の数値限界インタフェース
[編集] 実行時型識別
ヘッダ
<typeinfo> で定義 | |
処理系によって生成される、何らかの型の情報を持ちます。 これは typeid 演算子によって返されるクラスです (クラス) | |
typeid 式の引数がNULLの場合に投げられる例外 (クラス) | |
無効な dynamic_cast 式、例えば参照型のキャストの失敗によって投げられる例外 (クラス) | |
ヘッダ
<typeindex> で定義 | |
(C++11) |
連想コンテナおよび非順序連想コンテナでインデックスとして使用できる、 type_info オブジェクトのラッパー (クラス) |
[編集] 型特性 (C++11以上)
型特性は型の性質を問い合わせたり変更したりするコンパイル時のテンプレートベースのインタフェースです。
<type_traits>
ヘッダで定義されるテンプレートを特殊化する試みは未定義動作です。 ただし std::common_type はその説明で説明されているように特殊化しても構いません。
<type_traits>
ヘッダで定義されるテンプレートは、標準ライブラリのテンプレートを不完全型で実体化することが一般的に禁止されているにも関わらず、特に断りのない限り、不完全型で実体化しても構いません。
[編集] 型の性質
ヘッダ
<type_traits> で定義 | |
一次型カテゴリ | |
(C++11) |
型が void かどうか調べます (クラステンプレート) |
(C++14) |
型が std::nullptr_t かどうか調べます (クラステンプレート) |
(C++11) |
型が整数型かどうか調べます (クラステンプレート) |
(C++11) |
型が浮動小数点型かどうか調べます (クラステンプレート) |
(C++11) |
型が配列型かどうか調べます (クラステンプレート) |
(C++11) |
型が列挙型かどうか調べます (クラステンプレート) |
(C++11) |
型が共用体型かどうか調べます (クラステンプレート) |
(C++11) |
型がクラス型 (共用体を除く) かどうか調べます (クラステンプレート) |
(C++11) |
型が関数型かどうか調べます (クラステンプレート) |
(C++11) |
型がポインタ型かどうか調べます (クラステンプレート) |
(C++11) |
型が左辺値参照かどうか調べます (クラステンプレート) |
(C++11) |
型が右辺値参照かどうか調べます (クラステンプレート) |
(C++11) |
型が非静的メンバオブジェクトへのポインタかどうか調べます (クラステンプレート) |
(C++11) |
型が非静的メンバ関数へのポインタかどうか調べます (クラステンプレート) |
複合型カテゴリ | |
(C++11) |
型が基本型かどうか調べます (クラステンプレート) |
(C++11) |
型が算術型かどうか調べます (クラステンプレート) |
(C++11) |
型がスカラー型かどうか調べます (クラステンプレート) |
(C++11) |
型がオブジェクト型かどうか調べます (クラステンプレート) |
(C++11) |
型が複合型かどうか調べます (クラステンプレート) |
(C++11) |
型が左辺値参照または右辺値参照かどうか調べます (クラステンプレート) |
(C++11) |
型が非静的メンバ関数または非静的メンバオブジェクトかどうか調べます (クラステンプレート) |
型の性質 | |
(C++11) |
型が const 修飾されているかどうか調べます (クラステンプレート) |
(C++11) |
型が volatile 修飾されているかどうか調べます (クラステンプレート) |
(C++11) |
型がトリビアルかどうか調べます (クラステンプレート) |
(C++11) |
型がトリビアルにコピー可能かどうか調べます (クラステンプレート) |
(C++11) |
型が標準レイアウト型かどうか調べます (クラステンプレート) |
(C++11)(C++20で非推奨) |
型が POD (plain-old data) 型かどうか調べます (クラステンプレート) |
(C++11)(C++17で非推奨)(C++20で削除) |
型がリテラル型かどうか調べます (クラステンプレート) |
型のオブジェクト表現のすべてのビットが値に寄与するかどうか調べます (クラステンプレート) | |
(C++11) |
型がクラス型 (共用体を除く) かつ非静的データメンバを持たないかどうか調べます (クラステンプレート) |
(C++11) |
型が多相クラス型かどうか調べます (クラステンプレート) |
(C++11) |
型が抽象クラス型かどうか調べます (クラステンプレート) |
(C++14) |
型が final クラス型かどうか調べます (クラステンプレート) |
(C++17) |
型が集成体型かどうか調べます (クラステンプレート) |
(C++11) |
型が符号付き算術型かどうか調べます (クラステンプレート) |
(C++11) |
型が符号なし算術型かどうか調べます (クラステンプレート) |
(C++20) |
型が境界の既知な配列型かどうか調べます (クラステンプレート) |
(C++20) |
型が境界の未知な配列型かどうか調べます (クラステンプレート) |
サポートされている操作 | |
(C++11)(C++11)(C++11) |
型が特定の引数に対するコンストラクタを持っているかどうか調べます (クラステンプレート) |
型がデフォルトコンストラクタを持っているかどうか調べます (クラステンプレート) | |
(C++11)(C++11)(C++11) |
型がコピーコンストラクタを持っているかどうか調べます (クラステンプレート) |
(C++11)(C++11)(C++11) |
型が右辺値参照から構築できるかどうか調べます (クラステンプレート) |
(C++11)(C++11)(C++11) |
型が特定の引数に対する代入演算子を持っているかどうか調べます (クラステンプレート) |
(C++11)(C++11)(C++11) |
型がコピー代入演算子を持っているかどうか調べます (クラステンプレート) |
(C++11)(C++11)(C++11) |
型がムーブ代入演算子を持っているかどうか調べます (クラステンプレート) |
(C++11)(C++11)(C++11) |
型が削除されていないデストラクタを持っているかどうか調べます (クラステンプレート) |
(C++11) |
型が仮想デストラクタを持っているかどうか調べます (クラステンプレート) |
(C++17)(C++17)(C++17)(C++17) |
その型のオブジェクトが同じ型または何らかの別の型のオブジェクトと swap 可能かどうか調べます (クラステンプレート) |
性質の問い合わせ | |
(C++11) |
型のアライメント要件を取得します (クラステンプレート) |
(C++11) |
配列型の次元数を取得します (クラステンプレート) |
(C++11) |
配列型の指定された次元のサイズを取得します (クラステンプレート) |
型の関係 | |
(C++11) |
2つの型が同じかどうか調べます (クラステンプレート) |
(C++11) |
型が別の型から派生しているかどうか調べます (クラステンプレート) |
(C++11)(C++20) |
型が別の型に変換可能かどうか調べます (クラステンプレート) |
型が指定された引数型で (std::invoke によるかのように) 呼ぶことが可能かどうか調べます (クラステンプレート) | |
(C++20) |
2つの型がレイアウト互換かどうか調べます (クラステンプレート) |
ある型が別の型のポインタ相互変換可能な (最初の) 基底かどうか調べます (クラステンプレート) | |
ある型のオブジェクトがその型の指定された部分オブジェクトとポインタ相互変換可能かどうか調べます (関数テンプレート) | |
(C++20) |
2つの指定されたメンバが2つの指定された型の共通先頭部分列内でお互いに対応するかどうか調べます (関数テンプレート) |
[編集] 型変更
型変更テンプレートはテンプレート引数に変更を適用することによって新しい型定義を作成します。 結果の型は type
メンバ型を通してアクセスすることができます。
ヘッダ
<type_traits> で定義 | |
const volatile 指定子 | |
(C++11)(C++11)(C++11) |
指定された型から const, volatile またはその両方の指定子を削除します (クラステンプレート) |
(C++11)(C++11)(C++11) |
指定された型に const, volatile またはその両方の指定子を追加します (クラステンプレート) |
参照 | |
(C++11) |
指定された型から参照を削除します (クラステンプレート) |
(C++11)(C++11) |
指定された型に���辺値参照または右辺値参照を追加します (クラステンプレート) |
ポインタ | |
(C++11) |
指定された型からポインタを削除します (クラステンプレート) |
(C++11) |
指定された型にポインタを追加します (クラステンプレート) |
符号変更 | |
(C++11) |
指定された整数型を符号付きにします (クラステンプレート) |
(C++11) |
指定された整数型を符号なしにします (クラステンプレート) |
配列 | |
(C++11) |
指定された配列型からエクステントを1つ削除します (クラステンプレート) |
(C++11) |
指定された配列型からすべてのエクステントを削除します (クラステンプレート) |
[編集] その他の変換
ヘッダ
<type_traits> で定義 | |
(C++11) |
指定されたサイズの未初期化記憶域として使用するのに適した型を定義します (クラステンプレート) |
(C++11) |
指定された型すべてのための未初期化記憶域として使用するのに適した型を定義します (クラステンプレート) |
(C++11) |
関数に引数を値渡ししたときと同様の型変換を適用します (クラステンプレート) |
(C++20) |
std::remove_cv と std::remove_reference を合わせたもの (クラステンプレート) |
(C++11) |
コンパイル時ブーリアンに基づいて関数オーバーロードまたはテンプレート特殊化を隠蔽します (クラステンプレート) |
(C++11) |
コンパイル時ブーリアンに基づいてどちらかの型を選択します (クラステンプレート) |
(C++11) |
指定された型のグループの共通型を調べます (クラステンプレート) |
型のグループの共通の参照型を調べます (クラステンプレート) | |
(C++11) |
指定された列挙型に対する下位層の整数型を取得します (クラステンプレート) |
(C++11)(C++20で削除)(C++17) |
指定された引数のセットを渡して callable なオブジェクトを呼んだときの結果の型を推定します (クラステンプレート) |
(C++17) |
void の可変個引数エイリアステンプレート (エイリアステンプレート) |
(C++20) |
型引数を変更せずに返します (クラステンプレート) |
[編集] 型特性の演算
ヘッダ
<type_traits> で定義 | |
(C++17) |
可変個引数の論理積メタ関数 (クラステンプレート) |
(C++17) |
可変個引数の論理和メタ関数 (クラステンプレート) |
(C++17) |
論理否定メタ関数 (クラステンプレート) |
[編集] ヘルパークラス
ヘッダ
<type_traits> で定義 | |
(C++11)(C++17) |
指定された値を持つ指定された型のコンパイル時定数 (クラステンプレート) |
bool 型に対する std::integral_constant の2つの特殊化が提供されます。
ヘッダ
<type_traits> で定義 | |
型 | 定義 |
true_type
|
std::integral_constant<bool, true> |
false_type
|
std::integral_constant<bool, false> |
[編集] 定数評価文脈 (C++20以上)
ヘッダ
<type_traits> で定義 | |
(C++20) |
呼び出しが定数評価文脈内で発生したかどうか検出します (関数) |
[編集] 関連項目
型サポートライブラリ の C言語リファレンス
|