Requisitos denominados de C++: NullablePointer (desde C++11)
Especifica que el tipo es un objeto similar a un puntero que puede compararse con objetos std::nullptr_t.
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);
|
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
|
El efecto es | ||||
p == np
|
El efecto es | ||||
p != np
|
El efecto es |
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)
};
Biblioteca estándar
Los siguientes tipos deben satisfacer NullablePointer:
- Los tipos miembro
X::pointer,X::const_pointer,X::void_pointeryX::const_void_pointerde cada tipo AllocatorX. - El tipo miembro
X::pointerde std::unique_ptr. - El tipo std::exception_ptr.