「Cpp typeid演算子」の版間の差分
11行目: | 11行目: | ||
<br /> | <br /> | ||
== '''typeid演算子''' == | == '''typeid演算子''' == | ||
typeid 演算子は、C++で動的型情報(RTTI: Run-Time Type Information)を取得するための演算子です。typeid 演算子を使用すると、実行時にオブジェクトの型を知ることができます。以下に、typeid | typeid 演算子は、C++で動的型情報(RTTI: Run-Time Type Information)を取得するための演算子です。typeid 演算子を使用すると、実行時にオブジェクトの型を知ることができます。以下に、typeid 演算子の基本的な使い方と技術について解説します。 | ||
2024年2月28日 (水) 12:39時点における最新版
C++に戻る
本来の表記は「C++ typeid演算子」です。この記事に付けられた題名はテンプレート:記事名の制約から不正確なものとなっています。 |
※このページではC++にのみ存在する機能として、記事タイトルがC++ typeid演算子になっています。
typeid演算子
typeid 演算子は、C++で動的型情報(RTTI: Run-Time Type Information)を取得するための演算子です。typeid 演算子を使用すると、実行時にオブジェクトの型を知ることができます。以下に、typeid 演算子の基本的な使い方と技術について解説します。
typeid 演算子の基本構文:
#include <typeinfo> // 必要なヘッダファイルをインクルード
// ...
const std::type_info& typeInfo = typeid(expression);
- expression には型情報を知りたいオブジェクトや式を指定します。
- const std::type_info& は型情報を格納するための標準ライブラリの型です。
typeid 演算子の使用例:
#include <iostream>
#include <typeinfo>
class Base {
public:
virtual ~Base() {}
};
class Derived : public Base {};
int main() {
Base baseObj;
Derived derivedObj;
const std::type_info& baseType = typeid(baseObj);
const std::type_info& derivedType = typeid(derivedObj);
std::cout << "Type of baseObj: " << baseType.name() << std::endl;
std::cout << "Type of derivedObj: " << derivedType.name() << std::endl;
return 0;
}
この例では、Base クラスとその派生クラスである Derived クラスを定義し、それぞれのオブジェクトに対して typeid 演算子を使用して型情報を取得しています。
typeid 演算子の戻り値:
typeid 演算子の戻り値は std::type_info オブジェクトであり、以下のような情報にアクセスできます。
- name(): 型の名前を文字列として取得します。ただし、戻り値の文字列の形式は実装に依存します。
- before(const std::type_info& type): 他の型と比較して、その型が引数の型よりも前にあるかどうかを判定します。
使用例の注意点:
name() の戻り値の形式はプラットフォームやコンパイラによって異なるため、一般的にはデバッグ目的でのみ使用されます。リリースビルドでは使用を避けることが一般的です。 基底クラスと派生クラスの間で型情報を取得する場合、基底クラスのデストラクタを仮想関数にしておくと、正確な型情報を取得できます。
注意点と制約:
typeid 演算子は主にポリモーフィズム(多態性)に関連しており、基底クラスと派生クラスの型情報を正確に取得するためには、仮想関数を使用するなどの工夫が必要です。 ポインタや参照に対して typeid を使用すると、ポインタや参照が指すオブジェクトの型情報を取得します。
C++に戻る