Namespaces
Variants

std:: move_constructible

From cppreference.net
定义于头文件 <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 ,一个类型为 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]

参见

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