Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: DefaultInsertable (seit C++11)

Von cppreference.com
 
 
C++ benannte Anforderungen
 

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
  • X::value_type ist dasselbe wie T.
  • X::allocator_type ist dasselbe wie 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.

[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