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机器编写这个.
虽然指定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引用,然后您可以将该函数用于任何输入流.
| 归档时间: |
|
| 查看次数: |
1435 次 |
| 最近记录: |