C++ named requirements: CopyConstructible
Especifica que una instancia del tipo puede ser construida por copia desde una expresión lvalue .
Contenidos |
Requisitos
El tipo
T
satisface
CopyConstructible
si
-
El tipo
Tsatisface MoveConstructible , y
Dado
-
v
, una expresión
lvalue
de tipo
To const T o una expresión rvalue de tipo const T , - u , un identificador arbitrario.
Las siguientes expresiones deben ser válidas y tener sus efectos especificados:
| Expresión | Postcondiciones |
|---|---|
| T u = v ; |
El valor de
u
es equivalente al valor de
v
.
El valor de v permanece sin cambios. |
| T ( v ) |
El valor de
T
(
v
)
es equivalente al valor de
v
.
El valor de v permanece sin cambios. |
|
La expresión
v.~T
(
)
también debe ser válida, y, para lvalue
v
, la expresión
&
v
debe tener el tipo
|
(hasta C++11) |
Notas
Hasta C++11, las clases que sobrecargaban operator & no eran CopyConstructible y por lo tanto no podían usarse en los contenedores de la biblioteca estándar . Esta fue una decisión de diseño en C++98 (en lugar de un defecto, ver LWG issue 390 ).
Desde C++11, la biblioteca estándar utiliza std::addressof siempre que se necesita la dirección de un objeto.
| Contenido extendido |
|---|
|
Ser una clase CopyConstructible implica std::is_copy_constructible pero no viceversa, ya que std::is_copy_constructible solo verificará la capacidad de llamar al constructor con los argumentos correctos, y, por ejemplo, no un MoveConstructible requirement.
Ejecutar este código
#include <type_traits> #include <utility> struct S { S() = default; S(S&&) = delete; S(const S&) = default; }; static_assert(std::is_copy_constructible_v<S>); int main() { S s1; // Class `S` doesn't satisfy MoveConstructible requirement, // hence doesn't satisfy CopyConstructible requirement [[maybe_unused]] S s2{std::move(s1)}; // ill-formed, use of deleted function } |
Referencias
| Contenido extendido |
|---|
|
Véase también
|
(C++11)
(C++11)
(C++11)
|
verifica si un tipo tiene un constructor de copia
(plantilla de clase) |
|
(C++20)
|
especifica que un objeto de un tipo puede ser construido por copia y construido por movimiento
(concepto) |