# std::copy_constructible

< 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 起)

概念 `copy_constructible` 若符合这些条件则得到满足： `T` 为左值引用类型，或若它是 `move_constructible` 对象类型，而能从（可为 const 的）该类型左值或 const 右值，在直接和复制初始化语境中以通常语义构造该类型对象（构造副本而不更改源）。

### 语义要求

若 `T` 为对象类型，则 `copy_constructible<T>` 仅若符合下列条件才得到实现。给定

- `v` ， `T` 类型左值（可为 const ）或为 const T 类型右值，

下列为真：

- 定义 T u = v; 后， `u` 等于 `v` 且 `v` 不被修改；
- `T(v)` 等于 `v` 且不修改 `v` 。

### 参阅

is_copy_constructible is_trivially_copy_constructible is_nothrow_copy_constructible (C++11)(C++11)(C++11) | 检查类型是否拥有复制构造函数 (类模板)