ア | イ | ウ | エ | オ |
カ | キ | ク | ケ | コ |
サ | シ | ス | セ | ソ |
タ | チ | ツ | テ | ト |
ナ | ニ | ヌ | ネ | ノ |
ハ | ヒ | フ | ヘ | ホ |
マ | ミ | ム | メ | モ |
ヤ | ユ | ヨ | ||
ラ | リ | ル | レ | ロ |
ワ | ヰ | ヴ | ヱ | ヲ |
ン |
A | B | C | D | E |
F | G | H | I | J |
K | L | M | N | O |
P | Q | R | S | T |
U | V | W | X | Y |
Z | 数字 | 記号 |
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などの変数型を直接書いても良いし、即値でも良い。
結果はchar *、つまりASCIIZ形式で返される。
内容については完全に処理系依存である。
intを "int" と返す実装もあれば、"i" と記号で返す実装もあり、多様である。
FreeBSDのg++(GCC)では、次のような記号を返す。
char *なら "Pc"、const char *なら "PKc" になる。
classやstructは、その名前が返される。例えばclass Hogeに対するポインターは、クラス名が4文字なので、"P4Hoge" となる。
register、auto、staticなどの修飾は結果に現われないが、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" と出力される。
コメントなどを投稿するフォームは、日本語対応時のみ表示されます