Namespaces
Variants

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

From cppreference.net
C++ named requirements

Spécifie que le type est un objet de type pointeur qui peut être comparé à std::nullptr_t objects.

Table des matières

Exigences

Le type doit satisfaire à toutes les exigences suivantes :

De plus, un objet initialisé par valeur de ce type doit produire une valeur nulle de ce type. Cette valeur nulle ne doit être équivalente qu'à elle-même. L'initialisation par défaut du type peut avoir une valeur indéterminée ou erronée (depuis C++26) .

Une valeur du type doit être contextuellement convertible en bool . L'effet de cette conversion retourne false si la valeur est équivalente à sa valeur nulle et true dans le cas contraire.

Aucune des opérations que ce type effectue ne peut lever d'exceptions.

Le type doit satisfaire les expressions supplémentaires suivantes, étant donné deux valeurs p et q de ce type, et que np est une valeur de type std::nullptr_t (éventuellement qualifié const) :

Déclaration Effets
Type p ( np ) ;

Type p = np ;

Par la suite, p est équivalent à nullptr
Expression Effets
Type ( np ) Un objet temporaire qui est équivalent à nullptr
p = np Doit retourner un Type& , et par la suite, p est équivalent à nullptr
p ! = q

Le type et la valeur satisfont aux exigences BooleanTestable

(jusqu'à C++20)

decltype ( p ! = q ) modélise boolean-testable

(depuis C++20)

L'effet est ! ( p == q )

p == np

np == p


Le type et la valeur des deux expressions satisfont aux exigences BooleanTestable

(jusqu'à C++20)

decltype ( p == np ) et decltype ( np == p ) modélisent chacun boolean-testable

(depuis C++20)

L'effet est ( p == Type ( ) )

p ! = np

np ! = p


Le type et la valeur des deux expressions satisfont aux exigences BooleanTestable

(jusqu'à C++20)

decltype ( p ! = np ) et decltype ( np ! = p ) modélisent chacun boolean-testable

(depuis C++20)

L'effet est ! ( p == np )

Notes

Notez que le déréférencement ( operator * ou operator - > ) n'est pas requis pour un type NullablePointer . Un type minimaliste qui satisfait ces exigences est

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); }
    // ou seulement un operator== par défaut (depuis C++20)
};

Bibliothèque standard

Les types suivants satisfont NullablePointer :

Les types suivants doivent satisfaire NullablePointer afin de pouvoir communiquer avec les composants de la bibliothèque standard :

  • Les types membres X::pointer , X::const_pointer , X::void_pointer et X::const_void_pointer de chaque type Allocator X .
  • Le type membre pointer de std::unique_ptr .
(depuis C++23)

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 2114
( P2167R3 )
C++11 la convertibilité contextuelle vers bool était trop faible pour refléter les attentes des implémentations exigences renforcées