我对reinterpret_castvs的适用性有点困惑static_cast。从我读过的内容来看,一般规则是当类型可以在编译时解释时使用静态转换,因此这个词static。这也是 C++ 编译器在内部用于隐式转换的转换。
reinterpret_cast
static_cast
static
reinterpret_casts适用于两种场景:
我有点困惑的是我需要的一种用法,我从 C 调用 C,C 代码需要保留 C 对象,所以基本上它包含一个void*. 应该使用什么类型转换来在 thevoid *和 Class 类型之间进行转换?
void*
void *
我见过两者的用法static_cast和reinterpret_cast?虽然从我一直在阅读的内容来看,它似乎static更好,因为演员可以在编译时发生?虽然它说用于reinterpret_cast从一种指针类型转换为另一种?
C++ 标准保证以下内容:
static_cast指向和返回的指针会void*保留地址。也就是说,在下面,a和b都c指向同一个地址:
a
b
c
int* a = new int(); void* b = static_cast<void*>(a); int* c = static_cast<int*>(b);
reinterpret_cast仅保证如果您将指针转换为不同的类型, 然后将reinterpret_cast其返回到原始类型,您将获得原始值。所以在下面:
int* a = new int(); void* b = reinterpret_cast<void*>(a); int* c = reinterpret_cast<int*>(b);
a并且c包含相同的值,但未b指定的值。(实际上,它通常包含与 and 相同的地址a,c但标准中没有指定,并且在具有更复杂内存系统的机器上可能不是这样。)
对于从 的转换void*,static_cast应该是首选。