Espacios de nombres
Variantes
Acciones

Requisitos denominados de C++: NullablePointer (desde C++11)

De cppreference.com
< cpp‎ | named req
 
 
Requisitos denominados de C++
Números aleatorios
Concurrencia
(C++11)
(C++11)
Rangos
Vista multidimensional
Otros

 

Especifica que el tipo es un objeto similar a un puntero que puede compararse con objetos std::nullptr_t.

[editar] Requisitos

El tipo debe cumplir todos los siguientes requisitos:

(hasta C++23)
(desde C++23)

Además, un objeto inicializado con valor del tipo debe producir un valor nulo de ese tipo. Este valor nulo solo será equivalente a sí mismo. La inicialización por defecto del tipo puede tener un valor indeterminado o erróno (desde C++26).

Un objeto del tipo debe sercontextualmente convertible a bool. El efecto de esta conversión devuelve false (falso) si el valor es equivalente a su valor nulo y true (verdadero) en el caso contrario.

Ninguna de las operaciones que realiza este tipo puede generar excepciones.

El tipo debe satisfacer las siguientes expresiones adicionales, dados dos valores p y q que son del tipo, y que np es un valor de tipo std::nullptr_t (que puede estar calificado const):

Expresión Efectos
Tipo p(np);

Tipo p = np;

Después, p es equivalente a nullptr.
Tipo(np) Un objeto temporal que es equivalente a nullptr.
p = np Debe devolver un Tipo&, y después, p es equivalente a nullptr.
p != q

Debe devolver un valor que sea contextualmente convertiblea bool.

(hasta C++23)

decltype(p != q) modela boolean-testable

(desde C++23)

El efecto es !(p == q)

p == np

np == p

Debe devolver un valor que sea contextualmente convertiblea bool.

(hasta C++23)

decltype(p == np) y decltype(np == p) modelan boolean-testable

(desde C++23)

El efecto es (p == Tipo())

p != np

np != p

Debe devolver un valor que sea contextualmente convertible a bool.

(hasta C++23)

decltype(p != np) y decltype(np != p) modelan boolean-testable

(desde C++23)

El efecto es !(p == np)

[editar] Notas

Observa que no se requiere que un tipo NullablePointer se pueda desreferenciar (operator* o a operator->). Un tipo minimalista que satisface a estos requisitos es

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); }
    // o solamente un operador operator== por defecto (since C++20) 
};

[editar] Biblioteca estándar

Los siguientes tipos deben satisfacer NullablePointer: