Cpp typeid演算子

提供:yonewiki

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++に戻る