【问题标题】:typeid operator in C++C++ 中的 typeid 运算符
【发布时间】:2010-09-15 19:26:25
【问题描述】:

我有以下代码

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

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

"Data type = string"

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

class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >

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

【问题讨论】:

  • C++ 经常会欺骗初学者。信不信由你,那个小怪物和std::string是一样的。

标签: c++ visual-c++ typeid


【解决方案1】:

没有错。

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

【讨论】:

  • 一般编译器不会考虑类型定义,所以 - 无论好坏 - 编译错误都会显示所涉及的实际类型。与 typeid 事物相同...您需要同一类型的所有可能不同的 typedef 来解析相同的 typeid 记录,因此显然某些版本的真实姓名是name() 的唯一好选择。
【解决方案2】:

std::string 是 char 特化 std::basic_string 类模板的别名。你看到的输出是包含所有模板参数的完整类型名。

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2010-12-31
    相关资源
    最近更新 更多