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