C++ benannte Anforderungen: NullablePointer (seit C++11)
Gibt an, dass der Typ ein zeigerähnliches Objekt ist, das mit std::nullptr_t-Objekten verglichen werden kann.
Inhalt |
[bearbeiten] Anforderungen
Der Typ muss alle folgenden Anforderungen erfüllen
Zusätzlich muss ein wertinitialisiertes Objekt des Typs einen Nullwert dieses Typs erzeugen. Dieser Nullwert soll nur mit sich selbst äquivalent sein. Die Standardinitialisierung des Typs kann einen unbestimmten oder fehlerhaften(seit C++26) Wert haben.
Ein Wert des Typs muss kontextbezogen in bool konvertierbar sein. Die Auswirkung dieser Konvertierung gibt false zurück, wenn der Wert seinem Nullwert entspricht, und true andernfalls.
Keine der von diesem Typ ausgeführten Operationen darf Ausnahmen auslösen.
Der Typ muss die folgenden zusätzlichen Ausdrücke erfüllen, gegeben zwei Werte p und q, die vom Typ sind, und dass np ein Wert vom Typ std::nullptr_t ist (möglicherweise const-qualifiziert)
| Deklaration | Effekte | ||||
| Typ p(np);
Typ p = np; |
Danach ist p äquivalent zu nullptr | ||||
| Ausdruck | Effekte | ||||
| Typ(np) | Ein temporäres Objekt, das äquivalent zu nullptr ist | ||||
| p = np | Muss ein Type& zurückgeben, und danach ist p äquivalent zu nullptr | ||||
| p != q |
Die Auswirkung ist !(p == q) | ||||
| p == np
np == p |
Die Auswirkung ist (p == Type()) | ||||
| p != np
np != p |
Die Auswirkung ist !(p == np) |
[bearbeiten] Anmerkungen
Beachten Sie, dass Dereferenzierung (operator* oder operator->) für einen NullablePointer-Typ nicht erforderlich ist. Ein minimalistischer Typ, der diese Anforderungen erfüllt, ist
class handle { int id = 0; public: handle() = default; handle(std::nullptr_t) {} explicit operator bool() const { return id != 0; } friend bool operator==(handle l, handle r) { return l.id == r.id; } friend bool operator!=(handle l, handle r) { return !(l == r); } // or only a defaulted operator== (since C++20) };
[bearbeiten] Standardbibliothek
Die folgenden Typen erfüllen NullablePointer
Die folgenden Typen müssen NullablePointer erfüllen, um mit Standardbibliothekskomponenten kommunizieren zu können
- Die Mitgliedstypen
X::pointer,X::const_pointer,X::void_pointerundX::const_void_pointerjedes Allocator-TypsX. - Der Mitgliedstyp
pointervon std::unique_ptr.
|
(seit C++23) |
[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 |
|---|---|---|---|
| LWG 2114 (P2167R3) |
C++11 | kontextbezogene Konvertierbarkeit in bool war zu schwach, um die Erwartungen der Implementierungen widerzuspiegeln | Anforderungen verstärkt |