Requisitos denominados de C++: ConstruiblePorCopia
Especifica que un ejemplar del tipo puede construirse por copia a partir de una expresión l-valor.
Requisitos
El tipo T satisface a ConstruiblePorCopia si
- El tipo
Tsatisface a ConstruiblePorMovimiento, y dados:
Las siguientes expresiones deben ser válidas y tener los efectos especificados.
| Expresión | Poscondiciones |
|---|---|
T u = v;
|
El valor de u es equivalente al valor de v.
El valor de |
T(v)
|
El valor de T(v) es equivalente al valor de v.
El valor de |
|
La expresión |
(hasta C++11) |
Notas
Hasta C++11, las clases que sobrecargaban operator& no eran ConstruiblePorCopia, y por lo tanto, no eran utilizables en los contenedores de la biblioteca estándar. Esta es una decisión de diseño en C++98 (en lugar de un defecto, véase Asunto LWG 390).
A partir de C++11, la biblioteca estándar usa std::addressof siempre que se necesite la dirección del objeto.
| Contenido extendido |
|---|
|
Ser una clase ConstruiblePorCopia implica std::is_copy_constructible pero no al revés, ya que std::is_copy_constructible solo comprobará la capacidad de llamara al constructor con los argumentos correctos y, por ejemplo, no es un requisito de ConstruiblePorMovimiento. Ejecuta 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;
// La clase `S` no satisface el requisito ConstruiblePorMovimiento,
// por lo cual no satisface el requisito ConstruiblePorCopia
[[maybe_unused]] S s2{std::move(s1)}; // mal formado, uso de función eliminada
}
|
Referencias
| Contenido extendido |
|---|
|
Véase también
(C++11)(C++11)(C++11) |
Comprueba si un tipo tiene un constructor de copia Original: checks if a type has a copy constructor The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |
(C++20) |
especifica que un objeto de un tipo se puede copiar y mover (concepto) |