对移出对象允许哪些操作?
C 标准定义了已移出对象的行为。这些知识对于理解某些函数(例如 std::swap)如何工作至关重要。
标准定义
根据标准(第 17.6.5.15 节), C 标准库类型中的对象可以被移动并随后放置在“有效但未指定的状态。”
操作的含义
当对象处于未指定状态时,您可以执行任何没有前提条件的操作。无前提操作包括:
但是,操作有先决条件的通常不能在没有进一步检查的情况下执行。例如:
示例:std::swap
std: :swap 函数,如原始问题所示,需要分配给移出的对象。这是可能的,因为赋值是无前提操作。
附加说明:T c = std::move(a) 与 T c(std::move(a))
在 std::swap 实现中,使用直接移动赋值 T c = std::move(a) 而不是复制构造函数 T c(std::move(a))。这样做是为了避免不必要的 a 副本,这会导致性能损失。
以上是您可以用 C 中的移出对象做什么?的详细内容。更多信息请关注PHP中文网其他相关文章!