命名空间
变体
操作

std::move_constructible

来自 cppreference.cn
定义于头文件 <concepts>
template< class T >
concept move_constructible = std::constructible_from<T, T> && std::convertible_to<T, T>;
(C++20 起)

概念 move_constructible 被满足,如果 T 是引用类型,或者它是对象类型,并且该类型的对象可以在直接初始化和复制初始化上下文中从该类型的右值构造,并具有通常的语义。

[编辑] 语义要求

如果 T 是对象类型,则 move_constructible<T> 仅在给定以下条件时才成立:

  • rv,一个类型为 T 的右值,以及
  • u2,一个类型为 T 且等于 rv 的不同对象,

以下条件为真

  • 在定义 T u = rv; 之后,u 等于 u2
  • T(rv) 等于 u2;并且
  • 如果 T 不是 const 限定的,则 rv 的结果状态(在上述任何一个要点中的定义/表达式求值之后)是有效的但未指定;否则,它保持不变。

[编辑] 参考资料

  • C++23 标准 (ISO/IEC 14882:2024)
  • 18.4.13 概念 move_constructible [concept.moveconstructible]
  • C++20 标准 (ISO/IEC 14882:2020)
  • 18.4.13 概念 move_constructible [concept.moveconstructible]

[编辑] 参阅

检查类型是否可以从右值引用构造
(类模板) [编辑]