命名空间
变体
操作

std::move_constructible

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

T 是引用类型,或者当 T 是对象类型且该类型的对象可以从该类型的右值在直接初始化和复制初始化语境中构造时,move_constructible 概念得到满足,并具有通常的语义。

[edit] 语义要求

如果 T 是对象类型,则仅当给定以下条件时,move_constructible<T> 才会被建模

  • rv,类型为 T 的右值,并且
  • u2,与 rv 相等的类型为 T 的不同对象,

以下各项为真

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

[edit] 参考文献

  • 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]

[edit] 参见

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