0

重複の可能性:
typeid() は g++ で余分な文字を返します

cplusplus.comで、C++ ではtypeid関数が変数の型情報を取得できることを知りまし た。しかし、結果は私のマシンでは少し奇妙です。

例えば:

#include <iostream>
#include <typeinfo>
#include <vector>
using namespace std;

class Test
{
};
int main()
{
    vector<int> v;
    vector<vector<int> > v2;
    Test t;
    cout<<"typeid for class Test: "<<typeid(t).name()<<endl;
    cout<<"typeid for vector<int>: "<<typeid(v).name()<<endl;
    cout<<"typeid for vector<vector<<int> >: "<<typeid(v2).name()<<endl;
    return 0;
}

このコードを実行すると、マシンの出力は次のようになります。

typeid for class Test: 4Test
typeid for vector<int>: St6vectorIiSaIiEE
typeid for vector<vector<<int> >: St6vectorIS_IiSaIiEESaIS1_EE

クラス「Test」の前の「4」と、ベクトルの周りの奇妙な文字にかなり混乱しています。誰か説明してくれませんか?ありがとうございました!

私のオペレーティング システムは Fefora 17、g++ (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5) です。

4

1 に答える 1

0

typeid function can get variable's type infomation in C++

type_info::name()それは本当ですが、関数を呼び出すと、異なる型ごとに一意の名前が付けられますが、標準では、名前がある程度意味のあるものであるとは保証されていません。また、実装依存でもあります。

実際に(少なくともほとんど/すべての実装で)得られるのは、その型のマングル名です。

つまり、type_info::name()比較またはデバッグにのみ使用できます (意味のあるものを取得するには、自分で名前を解読する必要があります)。

編集 gcc を使用しているため、次のページを確認してください: http://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html

于 2012-12-01T17:36:44.503 に答える