使用static_cast转换任何指向char poiner的指针

时间:2014-10-22 07:16:08

标签: c++ pointers casting strict-aliasing

如果根据严格别名规则char指针可能指向任何类型指针,那么为什么我不能使用static_cast将任何类型的指针强制转换为char指针?

char *ptr;
int *intPtr;

ptr = reinterpret_cast<char*>(intPtr); // ok
ptr = static_cast<char*>(intPtr); // error: invalid static_cast from type 'int*' to type 'char*'

1 个答案:

答案 0 :(得分:3)

static_cast的工作原理与严格的别名规则无关。

static_cast不允许你在任意指针类型之间进行转换,它只能用于转换为 1 2 void* (并且转换为void*通常是多余的,因为转换已经隐含 3 )。

你可以这样做

ptr = static_cast<char*>(static_cast<void*>(intPtr));

但在

之间绝对没有差别 4
ptr = reinterpret_cast<char*>(intPtr);

https://github.com/cplusplus/draft/blob/master/papers/n4140.pdf

1 [expr.static.cast] / 6

2 [expr.static.cast] / 13

3 [conv.ptr] / 2

4 [expr.reinterpret.cast] / 7