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

dynamic_cast (int* to int *) - compilation error

对于以下代码:

int i = 8;

int * p_i = &i;
int * p_j;

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

我得到以下编译错误:

error: cannot dynamic_cast ‘p_i’ (of type ‘int*’) to type ‘int*’ (target is not pointer or reference to class)

我错过了什么?

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

更新: 由于这段代码是模板函数的一部分,我不知道我得到的是完整的 class 还是原始的 - 这就是原因。

正如编译器错误指出的那样,您不能使用 dynamic_cast 转换为 int*

为此使用 reinterpret_cast

来自 C++11 标准:

5.2.7 Dynamic cast [expr.dynamic.cast]

1 The result of the expression dynamic_cast<T>(v) is the result of converting the expression v to type T. T shall be a pointer or reference to a complete class type, or “pointer to cv void.”