命名空间
变体
操作

std::move_constructible (自 C++20 起)

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

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

[编辑] 语义要求

如果 T 是一个对象类型,那么只有在给定以下条件时,才会模拟 move_constructible<T>

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

以下为真

  • 在定义 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]

[编辑] 另请参阅

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