typeinfo / typeid 输出

Posted

技术标签:

【中文标题】typeinfo / typeid 输出【英文标题】:typeinfo / typeid output 【发布时间】:2010-10-07 16:07:09 【问题描述】:

我目前正在尝试调试一段简单的代码,并希望了解特定变量类型在程序期间如何变化。

我正在使用 typeinfo 头文件,因此我可以使用 typeid.name()。我知道 typeid.name() 是特定于编译器的,因此输出可能不是特别有用或标准。

我正在使用GCC,但假设存在 typeid 输出符号列表,但我无法找到潜在输出列表。我不想根据输出进行任何类型的转换或操作任何类型的数据,只需遵循其类型即可。

#include <iostream>
#include <typeinfo>

int main()
 
    int a = 10;
    cout << typeid(int).name() << endl;

任何地方都有符号列表吗?

【问题讨论】:

值得注意的是,它是与 MinGW 捆绑在一起的 GCC。 如果你只是想关注类型,那么if (typeid(a) == typeid(int)) /* action */ 呢? 你想做什么?符号列表到底是什么意思? "...变量类型更改..."。呃...在 C++ 中,变量类型永远不会改变。变量总是具有它最初声明的类型。 Unmangling the result of std::type_info::name的可能重复 【参考方案1】:

我不知道这样的列表是否存在,但是你可以制作一个小程序来打印出来:

#include <iostream>
#include <typeinfo>

#define PRINT_NAME(x) std::cout << #x << " - " << typeid(x).name() << '\n'

int main()

    PRINT_NAME(char);
    PRINT_NAME(signed char);
    PRINT_NAME(unsigned char);
    PRINT_NAME(short);
    PRINT_NAME(unsigned short);
    PRINT_NAME(int);
    PRINT_NAME(unsigned int);
    PRINT_NAME(long);
    PRINT_NAME(unsigned long);
    PRINT_NAME(float);
    PRINT_NAME(double);
    PRINT_NAME(long double);
    PRINT_NAME(char*);
    PRINT_NAME(const char*);
    //...

【讨论】:

非常感谢,不太清楚为什么我没有想到这一点。这非常有效。 template&lt; typename T &gt; void PRINT_NAME() std::cout &lt;&lt; … @Potatoswatter 你如何对 T 进行字符串化?你的解决方案不如 Bens 的强大。 为什么PRINT_NAME(long double) 输出ex 变量前面的 # 是什么语法?

以上是关于typeinfo / typeid 输出的主要内容,如果未能解决你的问题,请参考以下文章

C++判断变量/对象/枚举类型的简单方式

类型信息异常I/O流(day11)

使用typeid(变量或类型).name()来获取常量或变量的类型---gyy整理

ThinkPHP3.2中if判断条件是两个变量

dedecms织梦让channelartlist标签支持currentstyle属性

织梦channelartlist在栏目列表获取二级三级栏目