用更好的替代品替换reinterpret_cast?

Sam*_*rty 2 c++ reinterpret-cast

我在我的项目中有几个地方,我使用reinterpret_cast从流中读取/写入无符号整数.考虑以下功能:

size_t ReadSize(std::stringstream& stream) {
  char buf[sizeof(size_t)];
  stream.read(buf, sizeof(size_t));
  return *(reinterpret_cast<size_t*>(buf));
}

void WriteSize(std::stringstream& stream, size_t n) {
  stream.write(reinterpret_cast<char*>(&n), sizeof(size_t));
}
Run Code Online (Sandbox Code Playgroud)

我开始觉得使用reinterpret_cast有点不舒服,即使我没有遇到任何问题,所以我想知道,有更好的替代品吗?假设我在流中只有4个字节应该代表这个整数.

我认为static_cast也不适用于此处.有小费吗?

PS我目前不关心使用reinterpet_cast可能引起的可移植性或其他特定于平台的问题.我正在为Windows机器编写这个.

Som*_*ude 5

虽然指定read(和write)函数采用a char*,但实际上不必传递一个字符数组,只需在read(或write)调用中将指针强制转换为实际变量:

std::size_t size;
if (stream.read(reinterpret_cast<char*>(&size), sizeof(size_t)))
    return size;
return 0;  // Or something else on error
Run Code Online (Sandbox Code Playgroud)

在不相关的说明中,我建议您将stream参数更改为std::istream引用,然后您可以将该函数用于任何输入流.

  • @InsomniaArray:重新解释强制转换适用于I/O边界. (5认同)