C++ named requirements: NullablePointer (since C++11)
Gibt an, dass der Typ ein zeigerähnliches Objekt ist, das mit std::nullptr_t Objekten verglichen werden kann.
Inhaltsverzeichnis |
Anforderungen
Der Typ muss alle folgenden Anforderungen erfüllen:
**Anmerkung:** Die C++-spezifischen Begriffe (EqualityComparable, DefaultConstructible, CopyConstructible, CopyAssignable, Swappable, Destructible) wurden gemäß den Anforderungen nicht übersetzt, da es sich um feststehende Fachtermini in der C++-Programmierung handelt.Zusätzlich muss ein wertinitialisiertes Objekt des Typs einen Nullwert dieses Typs erzeugen. Dieser Nullwert darf nur sich selbst entsprechen. Die Standardinitialisierung des Typs kann einen indeterminierten oder fehlerhaften (since C++26) Wert haben.
Ein Wert des Typs muss kontextuell konvertierbar zu bool sein. Der Effekt dieser Konvertierung gibt false zurück, wenn der Wert seinem Nullwert entspricht, und true andernfalls.
Keine der Operationen, die dieser Typ ausführt, darf Ausnahmen auslösen.
Der Typ muss die folgenden zusätzlichen Ausdrücke erfüllen, gegeben zwei Werte p und q dieses Typs, und dass np ein Wert vom Typ std::nullptr_t (möglicherweise const-qualifiziert) ist:
| Deklaration | Effekte | ||||
|
Type p
(
np
)
;
Type p = np ; |
Danach ist p äquivalent zu nullptr | ||||
| Ausdruck | Effekte | ||||
| Type ( np ) | Ein temporäres Objekt, das äquivalent zu nullptr ist | ||||
| p = np |
Muss einen
Type&
zurückgeben, und danach ist
p
äquivalent zu
nullptr
|
||||
| p ! = q |
Der Effekt ist ! ( p == q ) |
||||
|
p
==
np
np == p |
Der Effekt ist ( p == Type ( ) ) |
||||
|
p
!
=
np
np ! = p |
Der Effekt ist ! ( p == np ) |
Hinweise
Beachten Sie, dass das Dereferenzieren ( 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); } // oder nur ein standardmäßiger operator== (seit C++20) };
` Tags wurde nicht übersetzt - Nur der Kommentar am Ende wurde ins Deutsche übersetzt: "// or only a defaulted operator== (since C++20)" → "// oder nur ein standardmäßiger operator== (seit C++20)" - C++-spezifische Begriffe wie "class", "handle", "operator", "bool", etc. wurden nicht übersetzt - Die Übersetzung ist präzise und professionell ausgeführt
Standardbibliothek
Die folgenden Typen erfüllen NullablePointer :
Die folgenden Typen müssen NullablePointer erfüllen, um mit Standardbibliothekskomponenten zu interagieren:
-
Die Membertypen
X::pointer,X::const_pointer,X::void_pointerundX::const_void_pointerjedes Allocator -TypsX. -
Der Membertyp
pointervon std::unique_ptr .
|
(seit C++23) |
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 2114
( P2167R3 ) |
C++11 | kontextuelle Konvertierbarkeit zu bool war zu schwach, um die Erwartungen der Implementierungen widerzuspiegeln | Anforderungen verstärkt |