typeid 演算子はクラス type_info のオブジェクトへの参照を生成します。これはそのオブジェクトの最も派生の進んだ型を記述するものです。typeid() 関数を使用するためには、ソースコードが <typeinfo> ヘッダーファイルをインクルード (#include) していなければなりません。この演算子とクラスの組み合わせは、比較を行うときにその利点を発揮します。そのような比較では、次の例に示すように最上位の const と volatile 修飾子は無視されます。この例では、A と B はデフォルトのコンストラクタを持つ型です。
#include <typeinfo> #include <assert.h> void use_of_typeinfo( ) { A a1; const A a2; assert( typeid(a1) == typeid(a2) ); assert( typeid(A) == typeid(const A) ); assert( typeid(A) == typeid(a2) ); assert( typeid(A) == typeid(const A&) ); B b1; assert( typeid(a1) != typeid(b1) ); assert( typeid(A) != typeid(B) ); }
typeid 演算子はヌルポインタが与えられたとき bad_typeid 例外割り込みを生成します。