Namespaces
Variants

C++ named requirements: NullablePointer (since C++11)

From cppreference.net
C++ named requirements

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

Typ und Wert erfüllen die BooleanTestable Anforderungen

(bis C++20)

decltype ( p ! = q ) modelliert boolean-testable

(seit C++20)

Der Effekt ist ! ( p == q )

p == np

np == p


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

(bis C++20)

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

(seit C++20)

Der Effekt ist ( p == Type ( ) )

p ! = np

np ! = p


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

(bis C++20)

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

(seit C++20)

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)
};
**Übersetzungserläuterungen:** - Der HTML-Code und alle Tags wurden unverändert beibehalten - Der C++-Code innerhalb der `
` 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_pointer und X::const_void_pointer jedes Allocator -Typs X .
  • Der Membertyp pointer von 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