C++ named requirements: NullablePointer (since C++11)
Especifica que el tipo es un objeto similar a un puntero que puede compararse con objetos std::nullptr_t .
Contenidos |
Requisitos
El tipo debe cumplir con todos los siguientes requisitos:
Además, un objeto inicializado por valor del tipo debe producir un valor nulo de ese tipo. Este valor nulo solo debe ser equivalente a sí mismo. La inicialización por defecto del tipo puede tener un valor indeterminado o erróneo (since C++26) .
Un valor del tipo debe ser contextualmente convertible a bool . El efecto de esta conversión devuelve false si el valor es equivalente a su valor nulo y true en caso contrario.
Ninguna de las operaciones que este tipo realiza puede lanzar 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 (posiblemente calificado con const):
| Declaración | Efectos | ||||
|
Type p
(
np
)
;
Type p = np ; |
Posteriormente, p es equivalente a nullptr | ||||
| Expresión | Efectos | ||||
| Type ( np ) | Un objeto temporal que es equivalente a nullptr | ||||
| p = np |
Debe retornar un
Type&
, y posteriormente,
p
es equivalente a
nullptr
|
||||
| p ! = q |
El efecto es ! ( p == q ) |
||||
|
p
==
np
np == p |
El efecto es ( p == Type ( ) ) |
||||
|
p
!
=
np
np ! = p |
El efecto es ! ( p == np ) |
Notas
Tenga en cuenta que la desreferenciación ( operator * o operator - > ) no es requerida para un tipo NullablePointer . Un tipo minimalista que satisface 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 solo un operator== por defecto (desde C++20) };
Biblioteca estándar
Los siguientes tipos satisfacen NullablePointer :
Los siguientes tipos deben satisfacer NullablePointer para poder comunicarse con componentes de la biblioteca estándar:
-
Los tipos miembro
X::pointer,X::const_pointer,X::void_pointeryX::const_void_pointerde cada tipo AllocatorX. -
El tipo miembro
pointerde std::unique_ptr .
|
(desde C++23) |
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
|
LWG 2114
( P2167R3 ) |
C++11 | la convertibilidad contextual a bool era demasiado débil para reflejar las expectativas de las implementaciones | requisitos fortalecidos |