如何检查typeid是否是运行时的指针?

时间:2016-10-20 02:34:43

标签: c++ pointers runtime typeid typeinfo

在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

,该怎么办?

1 个答案:

答案 0 :(得分:3)

typeid()会为您提供std::type_info个对象。这就是全部。

正如您在本文档中所看到的,type_info并没有真正告诉您很多。几乎任何使用都有&#34;实现定义&#34;。

并且,没有任何东西能够权威地告诉你,这种类型是否是某种指针。

&#34;实施定义&#34;意味着您的C ++编译器定义了这意味着什么。很有可能,如果您查阅编译器的文档,您会发现name()返回的一些其他解释,并且很可能从{name()轻松确定。 {1}},类型是否为指针。如何以及以何种方式完全取决于您的编译器,当然,它将完全不可移植。