Namensräume
Varianten
Aktionen

C++ benannte Anforderungen: NullablePointer (seit C++11)

Von cppreference.com
 
 
C++ benannte Anforderungen
 

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

Typ und Wert erfüllen die Anforderungen von BooleanTestable

(bis C++20)

decltype(p != q) modelliert boolean-testable

(seit C++20)

Die Auswirkung ist !(p == q)

p == np

np == p


Typ und Wert beider Ausdrücke erfüllen die Anforderungen von BooleanTestable

(bis C++20)

decltype(p == np) und decltype(np == p) modellieren jeweils boolean-testable

(seit C++20)

Die Auswirkung ist (p == Type())

p != np

np != p


Typ und Wert beider Ausdrücke erfüllen die Anforderungen von BooleanTestable

(bis C++20)

decltype(p != np) und decltype(np != p) modellieren jeweils boolean-testable

(seit C++20)

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_pointer und X::const_void_pointer jedes Allocator-Typs X.
  • Der Mitgliedstyp pointer von 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