我看到这通常用于文件处理(char *)&obj。
自从C++ 11以来,有很多可用的转换方法,例如静态转换,我们不能在这些方法上使用一种吗?
最佳答案
&符号用于获取obj的地址。
例:
#include <cstdio>
void printData(const char* p, int n) {
for(int i = 0; i < n; i++)
printf("byte %2d : %d\n", i, (int)p[i]);
}
struct DataStruct {
int x;
int y;
};
int main() {
DataStruct obj;
obj.x = 5;
obj.y = 257;
char* dataPtr = (char*)&obj;
printData(dataPtr, sizeof(DataStruct));
return 0;
}
其中(char *)&obj list 用于获取一个char *,该char *可以传递给printData函数,该函数只希望打印一个char数组。
在那个例子中,
char* dataPtr = (char*)&obj;
而是可以这样使用reinterpret_cast编写的:
char* dataPtr = reinterpret_cast<char*>(&obj);
会做同样的事情。使用reinterpret_cast而不是隐含的(char *)&obj的一个优点是,当您编写reinterpret_cast时,可以清楚地看到您在代码中此时正在执行某种奇怪的操作,并且可能存在危险。