ama*_*el2 7 c++ types typeid gettype
如何在c ++中正确识别变量类型.我试过这个来识别一种变量:
int a = 5;
std::cout << typeid(a).name() << std::endl;
Run Code Online (Sandbox Code Playgroud)
而不是预期的输出int,它给你:
i
Run Code Online (Sandbox Code Playgroud)
我很困惑,为什么会发生这种情况..它只是给你一个你声明变量的类型的第一个字母.Int不是唯一的...也是这样的:
char a = 'A'
std::cout << typeid(a).name() << std::endl;
Run Code Online (Sandbox Code Playgroud)
有一个简单的解决方法吗?任何帮助,将不胜感激!
Isa*_*aac 13
您的代码有两个问题,
首先typeid(..).name()返回一个实现定义的字符串,它可以是任何有效的字符串,它可以""为每个类型返回,它甚至可以为每个程序执行返回不同的值(虽然我相信该值在执行期间不能改变).GCC(和Clang?)返回不可读的名称,而Visual C++返回合理的名称(在这种情况下int)
其次如果类型a是多态类型,typeid(a)则返回typeid对应的动态类型a而不是用于声明的类型a,而是使用typeid(decltype(a)).
遗憾的是,没有标准的方法可以以人类可读或正确的C++语法的方式获取类型的名称.(如果你想要一种在GCC中工作的方法,请参见解析std :: type_info :: name的结果)
编辑使用Boost,您可以尝试std::cout << boost::typeindex::type_id<decltype(a)>().pretty_name() << std::endl;,请参阅获取人类可读和损坏的类型名称