int i = 1000;
void *p = &i;
int *x = static_cast<int*>(p);
int *y = reinterpret_cast<int*>(p);
Run Code Online (Sandbox Code Playgroud)
哪个演员应该用来转换void*
为int*
和为什么?
Ste*_*sop 14
static_cast
只要你知道(通过你的程序设计)指出的东西真的是一个int
.
static_cast旨在反转任何隐式转换.你转换为void*
隐式,因此你可以(并且应该)转换回来,static_cast
如果你知道你真的只是扭转了早期的转换.
有了这个假设,没有任何东西被重新解释 - void
是一个不完整的类型,意味着它没有值,所以在任何时候你都不会将存储的int值解释为"void"或将存储的"void value"解释为int.void*
只是一种丑陋的说法,"我不知道这种类型,但我会将指针传递给其他人".
reinterpret_cast
如果你遗漏了一些细节,这些细节意味着你实际上可能正在使用类型以外的类型读取内存,并且要注意你的代码将具有有限的可移植性.
顺便说一下,void*
在C++中以这种方式使用指针的原因并不是很多.C样式的回调接口通常可以替换为模板函数(对于任何类似于标准函数的东西qsort
)或虚拟接口(对于任何类似于已注册的侦听器的东西).如果您的C++代码使用的是某些C API,那么您当然没有太多选择.
归档时间: |
|
查看次数: |
4765 次 |
最近记录: |