is_trivially_copy_*
和 is_trivially_move_*
有什么区别?我可以使用 memcpy 移动构造/赋值 is_trivially_move_*
类型吗?
最佳答案
它们之间的区别正是标准所说的那样:具体操作是否微不足道。一个类可以有一个平凡的复制构造函数和一个非平凡的移动构造函数,反之亦然。
但是,这些特征不足以被 memcpy
替代。标准仅 允许您对TriviallyCopyable 的对象使用memcpy
.不仅可以平凡地复制构造,而且可以完全平凡地复制。所以你想要的特征是 is_trivially_copyable
。
从技术上讲,您还应该检查类型是否可复制构造/可分配,具体取决于您是否正在memcpy
事件对象。一个 TriviallyCopyable 类型可以有一个删除的复制构造函数或赋值运算符,在这种情况下,该类的作者希望不会发生这种形式的复制。 TriviallyCopyable 类型更常见的情况是删除复制赋值运算符(可能是因为有一个 const
成员),在这种情况下你不应该 memcpy
到事件对象。
关于c++ - 我可以只对那些 std::is_trivially_move_* 东西使用 memcpy 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49714055/