typeid

読み:タイプ・アイディー
外語:typeid 英語
品詞:名詞

C++の予約語の一つ。

オブジェクトの型情報であるtype_info型オブジェクトを得る演算子

目次

#include <typeinfo>

C++は、動的に型情報を取得する機構として実行時型情報(RTTI)というものが用意されている。

RTTIのためにtype_infoクラスが用意されており、標準C++ライブラリのtypeinfoをincludeすることで利用できるようになる。

typeid演算子は、const type_infoの参照を戻す。

定義

type_infoクラスには内部的な機能などもあるが、公開され、広く利用されるものは、オーバーロードされた二つの演算子(==演算子、!=演算子)と、次のメソッドである。

const char *name() const

これは、次のように使う。

std::cout << typeid(i).name() << std::endl;

iの部分は、変数名等の他、intなどの変数型を直接書いても良いし、即値でも良い。

nameメソッド

結果はchar *、つまりASCIIZ形式で返される。

内容については完全に処理系依存である。

intを "int" と返す実装もあれば、"i" と記号で返す実装もあり、多様である。

FreeBSDのg++(GCC)では、次のような記号を返す。

  • a signed char
  • b bool
  • c char
  • d double
  • e long double
  • f float
  • h unsigned char
  • i signed int、int
  • j unsigned int
  • l signed long、long
  • m unsigned long
  • s signed short、short
  • t unsigned short
  • v void
  • w wchar_t
  • x signed long long、long long
  • y unsigned long long
  • A 文字列(char *形式は "A長さ_c"、wchar_t *形式は "A長さ_w")
  • C 定数
  • E 終わり(FやNなどのモードの終端)
  • F 関数初め
  • K const
  • N namespace初め
  • P ポインター
  • V volatile
  • 数字 class、struct、enum、unionなど

char *なら "Pc"、const char *なら "PKc" になる。

classstructは、その名前が返される。例えばclass Hogeに対するポインターは、クラス名が4文字なので、"P4Hoge" となる。

registerautostaticなどの修飾は結果に現われないが、constはK、volatileはVが出力されている。

文字列を即値で与える(例えばtypeid("hoge").name()など)と、NUL末端を含めた文字列長と、charかwchar_tかの識別子が出力される。例えば、"A5_c" などとなる。

複雑な場合

関数やnamespace内のclassなどの場合、複雑な出力になる。

関数は、int hoge()であれば "FivE"、int main(int argc, char**argv)であれば "FiiPPcE" のようになる。

namespaceでは、namespace fuga内のclass hogeなら "N4fuga4hogeE" と出力される。

関連する用語
C++

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club