命名空间
变体
操作

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

来自 cppreference.com
< cpp‎ | concepts
定义在头文件 <concepts>
template< class T >

concept copy_constructible =
    std::move_constructible<T> &&
    std::constructible_from<T, T&> && std::convertible_to<T&, T> &&
    std::constructible_from<T, const T&> && std::convertible_to<const T&, T> &&

    std::constructible_from<T, const T> && std::convertible_to<const T, T>;
(自 C++20 起)

如果 T 是左值引用类型,或者它是可以从该类型的(可能是 const)左值或 const 右值在直接初始化和复制初始化上下文中使用通常语义构造的 move_constructible 对象类型(使用源对象不变的情况下构造副本),则满足概念 copy_constructible

[编辑] 语义要求

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

  • v,类型为(可能是 constT 的左值或类型为 const T 的右值,

以下条件为真

  • 在定义 T u = v; 之后,u 等于 vv 未被修改;
  • T(v) 等于 v 且不修改 v

[编辑] 参考

  • C++23 标准 (ISO/IEC 14882:2024)
  • 18.4.14 概念 copy_constructible [concept.copyconstructible]
  • C++20 标准 (ISO/IEC 14882:2020)
  • 18.4.14 概念 copy_constructible [concept.copyconstructible]

[编辑] 另见

检查类型是否具有复制构造函数
(类模板) [编辑]