C++ named requirements: DefaultConstructible
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Especifica que una instancia del tipo puede ser construida por defecto.
Contenidos |
Requisitos
El tipo
T
satisface
DefaultConstructible
si todas las siguientes declaraciones y expresiones son válidas y tienen sus efectos especificados:
| Expresión/Sentencia | Poscondición |
|---|---|
| T u ; | El objeto u es default-initialized . |
| T u { } ; | El objeto u es value-initialized o aggregate-initialized . |
|
T
(
)
T { } |
Un objeto temporal de tipo
T
es
value-initialized
o
aggregate-initialized
.
|
Notas
Para objetos de tipo clase no agregado, se debe definir un constructor predeterminado público (ya sea definido por el usuario o definido implícitamente) para satisfacer DefaultConstructible .
Los objetos no constantes de tipo objeto no clase son siempre DefaultConstructible .
Los tipos no-clase constantes no son DefaultConstructible .
Los tipos agregados constantes no son DefaultConstructible si alguno de sus miembros es un objeto de tipo no-clase.
Los tipos que no son objetos (tipos de función, tipos de referencia y el tipo (posiblemente calificado cv) void ) así como los tipos const que no son objetos nunca son DefaultConstructible .
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Se aplica a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 724 | C++98 | faltaban los requisitos de DefaultConstructible | añadidos |
| LWG 2170 | C++98 |
inicializar un objeto de un tipo
DefaultConstructible
con un
inicializador vacío solo podía resultar en inicialización de valor |
también puede llevar a
inicialización de agregado |
Véase también
|
(C++11)
(C++11)
(C++11)
|
verifica si un tipo tiene un constructor por defecto
(plantilla de clase) |
|
(C++20)
|
especifica que un objeto de un tipo puede ser construido por defecto
(concepto) |