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.
[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 |
El efecto es !(p == q) | ||||
p == np
np == p |
El efecto es (p == Tipo()) | ||||
p != np
np != p |
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:
- Los tipos miembro
X::pointer
,X::const_pointer
,X::void_pointer
yX::const_void_pointer
de cada tipo AllocatorX
. - El tipo miembro
X::pointer
de std::unique_ptr. - El tipo std::exception_ptr.