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

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

3
请参见static_cast有什么用? - Chuck Walbourn
1个回答

7
static_cast的工作原理与严格别名规则无关。 static_cast不允许在任意指针类型之间进行转换,它只能用于将指针转换为1和从2void* (将指针转换为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

这些内容涉及类型转换和指针的相关知识。

您所引用的链接需要授权。 - ignorant
@ignorant 这很奇怪,之前还是可以用的。我添加了一个不同的链接。 - user657267
@user657267 如果没有限定条件地说 static_cast<> "只能用于 void* 的转换",那就非常误导人了 - 它可以做更多的事情! - AAT
@AAT 谢谢你,显而易见的队长,请在句子的前半部分阅读该短语。 - user657267
@user657267 无礼将会使你一事无成。再见。 - AAT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接