在C ++中,是否可以确定type_info
对象是否在运行时描述指针?例如,
char a1;
char *a2;
const std::type_info &ti1 = typeid(a1);
const std::type_info &ti2 = typeid(a2);
std::cout << is_pointer(ti1) << std::endl;
std::cout << is_pointer(ti2) << std::endl;
将为false
打印ti1
,为true
打印ti2
。
显然可以做std::is_pointer<decltype(a1)>::value
,但这要求我们可以访问变量标识符a1
。如果我们只能访问其typeid
ti1
?
答案 0 :(得分:3)
typeid()
会为您提供std::type_info个对象。这就是全部。
正如您在本文档中所看到的,type_info
并没有真正告诉您很多。几乎任何使用都有&#34;实现定义&#34;。
并且,没有任何东西能够权威地告诉你,这种类型是否是某种指针。
&#34;实施定义&#34;意味着您的C ++编译器定义了这意味着什么。很有可能,如果您查阅编译器的文档,您会发现name()
返回的一些其他解释,并且很可能从{name()
轻松确定。 {1}},类型是否为指针。如何以及以何种方式完全取决于您的编译器,当然,它将完全不可移植。