C++ named requirements: DefaultInsertable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gibt an, dass ein Objekt des Typs durch einen gegebenen Allokator direkt an Ort und Stelle default-konstruiert werden kann.
Inhaltsverzeichnis |
Anforderungen
Gegeben die folgenden Typen, Werte und Ausdrücke:
| Typ | Definition |
T
|
ein Objekttyp |
A
|
ein Allokatortyp |
X
|
ein Containertyp, der alle folgenden Bedingungen erfüllt:
|
| Wert | Definition |
| m |
ein Lvalue vom Typ
A
|
| p |
ein Zeiger vom Typ
T*
|
Wenn der Ausdruck
std::
allocator_traits
<
A
>
::
construct
(
m, p
)
wohlgeformt ist,
ist
T
DefaultInsertable
in
X
.
Hinweise
Standardmäßig wird dies das Objekt wertinitialisieren , wie durch :: new ( ( void * ) p ) T ( ) (bis C++20) std:: construct_at ( p ) (seit C++20) .
Wenn die Wertinitialisierung unerwünscht ist, zum Beispiel wenn das Objekt einen Nicht-Klassentyp hat und das Nullsetzen nicht benötigt wird, kann sie vermieden werden, indem ein
benutzerdefinierter
Allocator::construct
bereitgestellt wird.
Obwohl es bis C++23 erforderlich war, dass benutzerdefinierte
construct
verwendet werden, wenn Elemente von
std::basic_string
konstruiert werden, haben alle Implementierungen nur den Standardmechanismus verwendet. Die Anforderung wurde durch
P1072R10
korrigiert, um der bestehenden Praxis zu entsprechen.
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| N3346 | C++11 |
die Anforderungen
CopyInsertable
und
MoveInsertable
sind vorhanden, aber DefaultInsertable fehlte |
Anforderung hinzugefügt |
Siehe auch
| DefaultConstructible | |
| CopyInsertable | |
| MoveInsertable | |
| EmplaceConstructible | |
| Erasable |