C++ named requirements: DefaultInsertable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Especifica que un objeto del tipo puede ser construido por defecto in-situ por un asignador dado.
Contenidos |
Requisitos
Dados los siguientes tipos, valores y expresiones:
| Tipo | Definición |
T
|
un tipo de objeto |
A
|
un tipo de asignador |
X
|
un tipo de contenedor que satisface todas las siguientes condiciones:
|
| Valor | Definición |
| m |
un lvalue de tipo
A
|
| p |
un puntero de tipo
T*
|
Si la expresión
std::
allocator_traits
<
A
>
::
construct
(
m, p
)
está bien formada,
T
es
DefaultInsertable
en
X
.
Notas
Por defecto, esto inicializará por valor el objeto, como mediante :: new ( ( void * ) p ) T ( ) (hasta C++20) std:: construct_at ( p ) (desde C++20) .
Si la inicialización por valor no es deseable, por ejemplo, si el objeto es de tipo no-clase y no se necesita poner a cero, puede evitarse proporcionando un
personalizado
Allocator::construct
.
Aunque se requería que se utilizara un
construct
personalizado al construir elementos de
std::basic_string
hasta C++23, todas las implementaciones solo utilizaron el mecanismo predeterminado. El requisito se corrigió mediante
P1072R10
para ajustarse a la práctica existente.
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| N3346 | C++11 |
los requisitos
CopyInsertable
y
MoveInsertable
están presentes, pero DefaultInsertable faltaba |
se añadió el requisito |
Véase también
| DefaultConstructible | |
| CopyInsertable | |
| MoveInsertable | |
| EmplaceConstructible | |
| Erasable |