C++ named requirements: TriviallyCopyable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hinweis: Der Standard definiert keine benannte Anforderung mit diesem Namen. Dies ist eine Typkategorie, die durch die Kernsprache definiert wird. Sie wird hier nur der Konsistenz halber als benannte Anforderung aufgeführt.
Inhaltsverzeichnis |
Anforderungen
Die folgenden Typen werden zusammen als trivially copyable types bezeichnet:
- Skalare Typen
- trivial kopierbare Klassentypen
- Arrays solcher Typen
- CV-qualifizierte Versionen dieser Typen
Hinweise
Im Allgemeinen können für jeden trivial kopierbaren Typ
T
und ein Objekt
obj1
vom Typ
T
die zugrundeliegenden Bytes von
obj1
in ein Array von
char
, oder
unsigned
char
, oder
std::byte
(seit C++17)
oder in
obj2
, ein separates Objekt vom Typ
T
, kopiert werden. Weder
obj1
noch
obj2
dürfen ein potenziell überlappendes Subobjekt sein.
Wenn die zugrundeliegenden Bytes von
obj1
in ein solches Array kopiert werden und dann der resultierende Inhalt zurück in
obj1
kopiert wird, behält
obj1
seinen ursprünglichen Wert. Wenn die zugrundeliegenden Bytes von
obj1
in
obj2
kopiert werden, enthält
obj2
den Wert von
obj1
.
Die zugrundeliegenden Bytes können durch std::memcpy oder std::memmove kopiert werden, solange kein lebendes volatile-Objekt zugegriffen wird.
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 |
|---|---|---|---|
| CWG 1734 | C++11 | C++03 POD mit gelöschter nicht-trivialer Zuweisung war nicht trivial | gelöschte Konstruktoren/Operatoren erlaubt |
| CWG 2094 | C++11 | Volatile Skalartypen sind nicht trivial kopierbar ( CWG 1746 ) | als trivial kopierbar festgelegt |
Siehe auch
|
(C++11)
|
prüft, ob ein Typ trivial kopierbar ist
(Klassen-Template) |