我看到这通常用于文件处理,(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 maneouver用于获取可以传递给printData函数的char *,该函数只需要打印一组字符。
在那个例子中,该行
char* dataPtr = (char*)&obj;
可以改为使用reinterpret_cast编写,如下所示:
char* dataPtr = reinterpret_cast<char*>(&obj);
这会做同样的事情。使用reinterpret_cast而不是神秘(char *)&obj的一个优点是,当你编写reinterpret_cast时,你可以更清楚地看到你正在做一些奇怪的事情并且可能在代码中的那个点上很危险。