我在阅读时发现了这个功能,我无法在CPPreference
找到它的定义Bjarne stroustrup的编程原则
以这种方式使用:
ifs.read(as_bytes(x),sizeof(int));`
我了解read
的工作原理,但您仍可以使用to_bytes
标准定义来帮助我。
答案 0 :(得分:2)
as_bytes
函数返回参数第一个字节的地址(因此read
调用将覆盖对象x
)。因此,在C ++ 11或更高版本中,可以按如下方式编写该函数:
template <class T>
char* as_bytes(T& x) {
return &reinterpret_cast<char&>(x);
// or:
// return reinterpret_cast<char*>(std::addressof(x));
}
评论中链接的版本早于C ++ 11。据推测Stroustrup首先转换为void*
的原因是因为reinterpret_cast
无法保证在C ++ 03中做正确的事情。另请注意,对于具有重载&
运算符的参数,旧版本将无法正常工作。