C++ 如何通过auto显式查看类型推断的结果?
我最近在学习C++11/14的自动特性 出于教育目的,我希望显式显示代码的类型推断结果。 我尝试了typeid().name(),但发现这种方法有两个问题C++ 如何通过auto显式查看类型推断的结果?,c++,c++11,type-inference,C++,C++11,Type Inference,我最近在学习C++11/14的自动特性 出于教育目的,我希望显式显示代码的类型推断结果。 我尝试了typeid().name(),但发现这种方法有两个问题 输出有时很难理解。(例如,“NSt3矢量图” 常量/易失性修饰符似乎不显示 @πάνταῥεῖ 我试过使用你指出的abi::\uucxa\uDemangle()。 问题1已解决,谢谢,但typeid().name()似乎不包含CV修饰符信息。 我认为使用auto关键字存在一些缺陷,因此我希望看到类型推断的确切结果,包括CV修饰符和引用类型 我
auto
关键字存在一些缺陷,因此我希望看到类型推断的确切结果,包括CV修饰符和引用类型
我正在mac os 10.10.3上使用clang 6.1.0,但如果可能的话,我想知道实现这一点的便携方法。尝试Scott Meyers(有效的现代C++)提出的方法: 声明模板(但不定义它)
模板//仅适用于TD的声明;
TD类;//TD==“类型显示器”
然后使用您的类型实例化此模板
TD<decltype(x)> xType
TD-xType
编译器现在会抱怨这个不完整的类型(通常会显示它的全名)
错误:聚合“TDcout << boost::typeindex::type_id<int const volatile*>().pretty_name() << endl;
cout << boost::typeindex::type_id_with_cvr<int const&>().pretty_name() << endl;
@JBL它不需要是同一个问题,只要有一个合适的答案,并且有IMHO。@πάνταῥεῖ 嗯,最实际的答案不是在副本上,也不太适合imho,但是。。。(虽然确实有一些答案可以帮助他)@JBL好吧,我要重新讨论这个问题,你可以发布一个更好的答案。你使用的是什么编译器和操作系统?是什么?你的意思是什么?啊,该死,这是同一个想法!:D@JBL不完全一样
decltype(x)
可能是引用类型,而代码中的T
永远不会是引用类型。@JBL:正如我所说的:必须阅读。。。所以其他人也读过也不奇怪……啊,对了,没听懂。。但是使用decltype
是唯一的方法吗?非常感谢您的快速回复!实际上,我开始阅读“有效的现代C++”,我想检查第1项的实际行为。。。
cout << boost::typeindex::type_id<int const volatile*>().pretty_name() << endl;
cout << boost::typeindex::type_id_with_cvr<int const&>().pretty_name() << endl;
int const volatile*
int const&