C++ (char*)和obj备选方案

C++ (char*)和obj备选方案,c++,c++11,file-handling,C++,C++11,File Handling,我发现这在文件处理、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 DataStr

我发现这在文件处理、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;
}
可以改为使用reinterpret_cast编写,如下所示:

char* dataPtr = reinterpret_cast<char*>(&obj);

这会做同样的事情。使用reinterpret_cast而不是神秘的char*&obj的一个优点是,当您编写reinterpret_cast时,可以更清楚地看到您在代码中的某一点上做了一些奇怪的、可能是危险的事情。

它基本上用于一次只传输一个字节的数据,它本质上就像一个重新解释的演员阵容。一些人认为在这种情况下应该使用重新解释的演员阵容,其他人则使用C风格的演员阵容。我在重新诠释演员的阵营里。这归根结底是一个风格和团队惯例的问题。使用对您的团队最有效的方法。我更喜欢更详细的样式,因为这样我可以更容易地获得它。常用于文件处理,char*&obj。你能举个例子吗?在很多情况下,可以省略对char*的强制转换。如果二进制写入需要char*,我认为这是一个设计错误。这些函数应该使用VC++ *.GEZ-FWW,STD::Basic IsFix::Read使用char *。
char* dataPtr = reinterpret_cast<char*>(&obj);