使用 static_cast 将任何指针转换为 char 指针

ign*_*ant 4 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*'
Run Code Online (Sandbox Code Playgroud)

use*_*267 5

如何static_cast作品是毫无关系的严格别名规则。

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

你可以这样做

ptr = static_cast<char*>(static_cast<void*>(intPtr));
Run Code Online (Sandbox Code Playgroud)

但绝对没有区别4

ptr = reinterpret_cast<char*>(intPtr);
Run Code Online (Sandbox Code Playgroud)

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

1 [expr.static.cast] / 6

2 [expr.static.cast] / 13

3 [转化率] / 2

4 [expr.reinterpret.cast] / 7