C++ benannte Anforderungen: DefaultInsertable (seit C++11)
Gibt an, dass ein Objekt des Typs mit einem gegebenen Allokator vor Ort standardkonstruiert werden kann.
Inhalt |
[bearbeiten] Anforderungen
Gegeben die folgenden Typen, Werte und Ausdrücke
| Typ | Definition |
T
|
ein Objekttyp |
A
|
ein Allokator-Typ |
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.
[bearbeiten] Hinweise
Standardmäßig wird das Objekt wertinitialisiert, wie mit ::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 von einem Nicht-Klassen-Typ ist und Nullen nicht benötigt wird, kann sie durch Bereitstellung eines benutzerdefinierten Allocator::construct vermieden werden.
Obwohl bis C++23 gefordert war, dass ein angepasster construct beim Konstruieren von Elementen von std::basic_string verwendet wird, haben alle Implementierungen nur den Standardmechanismus genutzt. Die Anforderung wurde durch P1072R10 korrigiert, um die bestehende Praxis anzupassen.
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| N3346 | C++11 | die Anforderungen CopyInsertable und MoveInsertable vorhanden waren, aber DefaultInsertable fehlte |
fügte die Anforderung hinzu |
[bearbeiten] Siehe auch
| DefaultConstructible | |
| CopyInsertable | |
| MoveInsertable | |
| EmplaceConstructible | |
| Erasable |