typeid 演算子

typeid( type-id )
typeid( expression )

解説

typeid の演算子はオブジェクトの型が実行時に決定されます。

typeid の結果は 定数 type_info   です。値は typeid のフォームを使用する 型 ID または型を表す type_info のオブジェクトへの参照です。詳細についてはtype_info のクラス を参照してください。

typeid の演算子はマネージ型を指定された型の Type を取得する方法については(抽象宣言インスタンス)" typeid を使用しません。

typeid の演算子はオブジェクトの実際の型を指定する静的な情報によって判断できないポリモーフィック クラス型の左辺値に適用した場合を確認します。このような例を次に示します。:

  • クラスへの参照

  • と逆参照するポインター *

  • subscripted (つまりポインター。[ ]).一般にポリモーフィック型へのポインターを含む下付き文字を使用するのは安全ではないことに注意してください)。

基本クラスへ ポインターの を入力するとオブジェクトがその基本クラスから派生した型は実際には派生クラスの type_info の参照が発生します。 式は ポリモーフィックな型 (クラスの仮想関数) を示す必要があります。それ以外の場合結果は で参照されている静的クラスの type_info です。さらにポインターが指し示すオブジェクトを使用するための逆参照する必要があります。ポインターの逆参照しないで結果が何を指すポインターの type_infoありません。次に例を示します。

// expre_typeid_Operator.cpp
// compile with: /GR /EHsc
#include <iostream>
#include <typeinfo.h>

class Base {
public:
   virtual void vvfunc() {}
};

class Derived : public Base {};

using namespace std;
int main() {
   Derived* pd = new Derived;
   Base* pb = pd;
   cout << typeid( pb ).name() << endl;   //prints "class Base *"
   cout << typeid( *pb ).name() << endl;   //prints "class Derived"
   cout << typeid( pd ).name() << endl;   //prints "class Derived *"
   cout << typeid( *pd ).name() << endl;   //prints "class Derived"
   delete pd;
}

式が ポインターを逆参照しそのポインター値がゼロの場合 typeidbad_typeid の例外 をスローします。ポインターが有効なオブジェクトをポイントするには違反 (オブジェクトが把握して (無効であるためアクセス違反など) に発生した RTTI を分析することを示す例外がスローされます __non_rtti_object 無効なポインターまたはコードは /GR でコンパイルされます)。

式が オブジェクトの基本クラスへの参照ポインターの場合結果は静的な の型を表す type_info の参照です。式の 静的な型は コンパイル時に認識されるように式の種類を示します。実行セマンティクスは静的な式の型を評価するときに無視されます。さらに参照は静的な型を判断するときに無視できる場合 :

// expre_typeid_Operator_2.cpp
#include <typeinfo>

int main()
{
   typeid(int) == typeid(int&); // evaluates to true
}

テンプレートにも typeid はテンプレート パラメーターの型を決定することがあります :

// expre_typeid_Operator_3.cpp
// compile with: /c
#include <typeinfo>
template < typename T > 
T max( T arg1, T arg2 ) {
   cout << typeid( T ).name() << "s compared." << endl;
   return ( arg1 > arg2 ? arg1 : arg2 );
}

参照

関連項目

実行時の型情報

C++ のキーワード