Namespaces
Variants

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

From cppreference.net
C++ named requirements

Spezifiziert, dass ein Objekt des Typs aus einem Rvalue dieses Typs durch einen gegebenen Allokator in nicht initialisierten Speicher konstruiert werden kann.

Inhaltsverzeichnis

Anforderungen

Gegeben die folgenden Typen, Werte und Ausdrücke:

Typ Definition
T ein Objekttyp
A ein Allokator-Typ
X ein Container-Typ, 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*
Ausdruck Definition
rv ein Ausdruck, der einen Rvalue vom Typ T bezeichnet
expr std:: allocator_traits < A > :: construct ( m, p, rv )

T ist MoveInsertable in X , wenn alle folgenden Bedingungen erfüllt sind:

  • expr ist wohlgeformt.
  • Unmittelbar nach der Auswertung von expr entspricht der Wert von * p dem Wert von rv vor der Auswertung.

Hinweise

Wenn A ein std:: allocator < T > ist, dann ruft dies Placement- new auf, wie durch :: new ( ( void * ) p ) T ( rv ) (bis C++20) std:: construct_at ( p, rv ) (seit C++20) . Dies erfordert effektiv, dass T move-konstruierbar ist.

Falls std:: allocator < T > oder ein ähnlicher Allokator verwendet wird, muss eine Klasse keinen Move-Konstruktor implementieren, um diese Typanforderung zu erfüllen: Ein Kopierkonstruktor , der ein const T & -Argument akzeptiert, kann Rvalue-Ausdrücke binden. Falls eine MoveInsertable -Klasse einen Move-Konstruktor implementiert, kann sie ebenfalls Move-Semantik implementieren, um den Umstand zu nutzen, dass der Wert von rv nach der Konstruktion nicht spezifiziert ist.

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
LWG 2177 C++11 Die Auswertung von expr hatte keine Nachbedingung hinzugefügt

Siehe auch

CopyInsertable