Namespaces
Variants

std:: copy_constructible

From cppreference.net
定义于头文件 <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 是左值引用类型,或者当它是满足 move_constructible 的对象类型时,若该类型的对象在直接初始化和拷贝初始化语境中都能通过(可能为 const 的)左值或 const 右值以常规语义(构造副本且保持源对象不变)完成构造,则概念 copy_constructible 得到满足。

语义要求

T 是对象类型,则仅当满足以下条件时 copy_constructible<T> 被实现:

  • v ,一个类型为(可能带有 const 限定) T 的左值,或类型为 const T 的右值,

以下情况为真:

  • 在定义 T u = v ; 之后, u 等于 v v 不会被修改;
  • 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]

另请参阅

检查类型是否拥有拷贝构造函数
(类模板)