我如何正确识别 C++ 中的变量类型。我试过这个来识别一种变量:
int a = 5;
std::cout << typeid(a).name() << std::endl;
而不是预期的输出 int,它为您提供:
i
我对为什么会发生这种情况感到非常困惑。它以某种方式只给你声明变量的类型的第一个字母。 Int 不是唯一的……也是这个:
char a = 'A'
std::cout << typeid(a).name() << std::endl;
Example Program
有一个简单的解决方法吗?任何帮助,将不胜感激!
原文由 amanuel2 发布,翻译遵循 CC BY-SA 4.0 许可协议
你的代码有两个问题,
首先
typeid(..).name()
返回一个实现定义的字符串,它可以是任何有效的字符串,它可以为每种类型返回""
,它甚至可以为每个程序执行返回不同的值(尽管我相信值在执行期间不能改变)。 GCC(和 Clang?)返回不可读的名称,而 Visual C++ 返回合理的名称(在本例中为int
)Secondly if the type of
a
is a polymorphic type,typeid(a)
will return thetypeid
corresponding to the dynamic type ofa
and not the用于声明a
的类型,改为使用typeid(decltype(a))
。不幸的是,没有以人类可读或正确 C++ 语法的方式获取类型名称的标准方法。 (如果您想要一种在 GCC 中工作的方式,请参阅 Unmangling the result of std::type_info::name )
使用 Boost 编辑,您可以尝试
std::cout << boost::typeindex::type_id<decltype(a)>().pretty_name() << std::endl;
,请参阅 Getting human readable and mangled type names