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

cast any pointer to char poiner using static_cast

本文关键字:转换 char poiner 指针 static cast 任何 使用      更新时间:2023-10-16

如果根据严格的别名规则,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*'

static_cast的工作方式与严格的混叠规则无关。

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

你可以做这个

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

但这与之间绝对没有区别

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.relprete.cast]/7