C++ named requirements: TriviallyCopyable (seit C++11)
Hinweis: Der Standard definiert keine benannte Anforderung mit diesem Namen. Dies ist eine von der Kernsprache definierte Typkategorie. Sie ist hier nur der Konsistenz halber als benannte Anforderung enthalten.
Inhalt |
[bearbeiten] Anforderungen
Die folgenden Typen werden zusammen als trivially copyable Typen bezeichnet
- Skalartypen
- trivially copyable Klassentypen
- Arrays solcher Typen
- CV-qualifizierte Versionen dieser Typen
[bearbeiten] Hinweise
Im Allgemeinen können für jeden trivially copyable Typ T und ein Objekt obj1 von T die zugrunde liegenden Bytes von obj1 in ein Array von char oder unsigned char, oder std::byte(seit C++17) oder in obj2, ein separates Objekt von T kopiert werden. Weder obj1 noch obj2 dürfen ein potenziell überlappendes Subobjekt sein.
Wenn die zugrunde liegenden Bytes von obj1 in ein solches Array kopiert und dann der resultierende Inhalt zurück in obj1 kopiert wird, enthält obj1 seinen ursprünglichen Wert. Wenn die zugrunde liegenden Bytes von obj1 in obj2 kopiert werden, enthält obj2 den Wert von obj1.
Die zugrunde liegenden Bytes können mit std::memcpy oder std::memmove kopiert werden, solange kein lebendes volatile Objekt zugegriffen wird.
[bearbeiten] Defect reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes 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 skalare Typen sind nicht trivially copyable (CWG 1746) | wurde trivially copyable gemacht |
[bearbeiten] Siehe auch
| (C++11) |
prüft, ob ein Typ trivial kopierbar ist (Klassenvorlage) |