Namespaces
Variants

C++ named requirements: DefaultInsertable (since C++11)

From cppreference.net
C++ named requirements

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:
  • X::value_type ist identisch mit T .
  • X::allocator_type ist identisch mit std:: allocator_traits < A > :: rebind_alloc < T > .
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