dynamic_cast(int * to int *) - 编译错误

时间:2016-09-16 19:11:03

标签: c++ dynamic-cast

以下代码:

int i = 8;

int * p_i = &i;
int * p_j;

if (typeid(p_i) != typeid(p_j))
{
     p_j= dynamic_cast<int *>(p_i);
}

我收到以下编译错误:

  

错误:不能dynamic_cast'p_i'(类型'int *')来键入'int *'(目标不是指针或对类的引用)

我错过了什么?

P.S。这是我获得的行为的简化示例(使用模板函数等),因此不要试图在此代码段中找到任何目的。

UPD: 由于此代码是模板函数的一部分,我无法知道我是否获得了完整的类或原语 - 这就是原因。

1 个答案:

答案 0 :(得分:2)

由于编译器错误指出,您无法使用dynamic_cast转换为int*

使用reinterpret_cast

来自C ++ 11标准:

  

5.2.7动态广告 [expr.dynamic.cast]

     

1表达式dynamic_cast<T>(v)的结果是将表达式v转换为类型T的结果。 T应该是对完整类类型的指针或引用,或者是指向 cv void的指针。“