如何识别变量的类型

新手上路,请多包涵

我如何正确识别 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 许可协议

阅读 380
1 个回答

你的代码有两个问题,

首先 typeid(..).name() 返回一个实现定义的字符串,它可以是任何有效的字符串,它可以为每种类型返回 "" ,它甚至可以为每个程序执行返回不同的值(尽管我相信值在执行期间不能改变)。 GCC(和 Clang?)返回不可读的名称,而 Visual C++ 返回合理的名称(在本例中为 int

Secondly if the type of a is a polymorphic type, typeid(a) will return the typeid corresponding to the dynamic type of a 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

原文由 Isaac 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题