Requisitos denominados de C++:TrivialmenteCopiable(desde C++11)
Nota: el estándar no define un requisito denominado con este nombre. Esta es una categoría de tipo definida por el lenguaje central. Se incluye aquí como un requisito con nombre solamente por consistencia.
Contenido |
[editar]Requisitos
Los siguientes tipos se denominan colectivamente tipos copiable trivialmente:
- tipos escalares
- tipos de clase copiable trivialmente
- arrays de dichos tipos
- las versiones calificadas cv de estos tipos
[editar]Notas
En general, para cualquier tipo T
copiable trivialmente y un objeto obj1
de T
, los bytes subyacentes de obj1
se pueden copiar en un array de char, o unsignedchar, o std::byte(desde C++17) o en obj2
, otro objeto de T
. Ni obj1
ni obj2
pueden ser un subobjeto potencialmente superpuesto.
Si los bytes subyacentes de obj1
se copian en dicho array y luego el contenido resultante se vuelve a copiar en obj1
, obj1
mantendrá su valor original. Si los bytes subyacentes de obj1
se copian en obj2
, obj2
contendrá el valor de obj1
.
Los bytes subyacentes se pueden copiar mediante std::memcpy o std::memmove, siempre que no se acceda a ningún objeto volátil.
[editar]Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
CWG 1734 | C++11 | C++03 POD con asignación no trivial eliminada era no trivial. | Se permiten constructores/operadores eliminados. |
CWG 2094 | C++11 | Tipos escalares volátiles no son trivialmente copiables (CWG 1746). | Se hicieron trivialmente copiables. |
[editar]Véase también
(C++11) | Comprueba si un tipo es trivialmente copiable. (plantilla de clase) |