出于某种原因,我想做类似的事情:
template<typename Data>
void write(const Data& data) {
std::fstream out {...};
out.write(reinterpret_cast<const char *>(&data), sizeof(Data));
out.flush();
}
Data
是仅具有原始类型的类型,或更具体而言,是可以简单复制的类型。这是否意味着如果我在static_assert (std::is_trivially_copyable<Data>::value, "");
中使用write()
,我真的确定没有类型可以传递给不能重新解释为字节的函数吗?还是我应该在static_assert中检查其他条件?
答案 0 :(得分:2)
我猜可复制的程度并不能真正说明安全性。
但是无论如何,你应该自己决定。
假设数据包含不可平凡类型的指针。指针本身实际上是可轻松复制的,它使整个类型可轻松复制的。但是,有没有将指针值写入文件的感觉?
因此,即使您决定检查每个成员值是否都是容易复制的并获得肯定的答案,也不一定意味着您可以将此类型写入文件。
另一方面,如果一个类型仅包含基本类型并且具有副本或移动构造函数,则将其归为不可平凡复制,但是将其写入是完全安全的一个文件。