【发布时间】:2018-04-08 03:16:16
【问题描述】:
is_trivially_copy_* 和 is_trivially_move_* 有什么区别?我可以使用 memcpy 移动构造/赋值is_trivially_move_* 类型吗?
【问题讨论】:
is_trivially_copy_* 和 is_trivially_move_* 有什么区别?我可以使用 memcpy 移动构造/赋值is_trivially_move_* 类型吗?
【问题讨论】:
它们之间的区别正是标准所说的:具体操作是否微不足道。一个类可以有一个普通的复制构造函数和一个非普通的移动构造函数,反之亦然。
但是,这些特征不足以替换为memcpy。标准仅允许您将memcpy 用于TriviallyCopyable 的对象。不仅可以简单地复制构造,而且可以完整地复制。所以你想要的特质是is_trivially_copyable。
从技术上讲,您还应该检查该类型是否是可复制构造/可分配的,具体取决于您是否memcpying 到活动对象。 TriviallyCopyable 类型可以具有已删除的复制构造函数或赋值运算符,在这种情况下,该类的编写者希望不会发生该表单的复制。 TriviallyCopyable 类型更常见的情况是删除复制赋值运算符(可能是因为有 const 成员),在这种情况下,您不应该将 memcpy 分配给活动对象。
【讨论】: