C++中的typeid运算符

4 c++ typeid visual-c++

我有以下代码

int main()
{
    cout << "Please enter your name..." << endl;
    cin >> name;
    cout << "Data type = " << typeid(name).name() << endl;
    cin.get();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

根据我读过的关于typeid运算符的各种教科书和文档,我应该阅读

"Data type = string"
Run Code Online (Sandbox Code Playgroud)

作为输出.相反,我得到以下内容

class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
Run Code Online (Sandbox Code Playgroud)

有谁知道我哪里出错了?FWIW,我正在使用Visual Studio 2010 Professional.

GMa*_*ckG 14

没有错误.

那些教科书首先应该告诉你结果name()是实现定义的,很可能是"".其次,那种类型 std::string.该std::string类型是只是一个typedef的std::basic_string使用char和朋友.

  • 一般来说,编译器不会考虑typedef,因此 - 无论好坏,编译错误会显示所涉及的实际类型.与typeid的东西相同......你需要同一类型的所有可能不同的typedef来解析相同的typeid记录,所以显然某些版本的真实名称是`name()`唯一的好选择. (2认同)