operator==, !=, <, <=, >, >=, <=>(std::optional)
De cppreference.com
Definido en el archivo de encabezado <optional>
|
||
Compara dos objetos optional |
||
template< class T, class U > constexpr bool operator==( const optional<T>& lhs, const optional<U>& rhs ); |
(1) | (desde C++17) |
template< class T, class U > constexpr bool operator!=( const optional<T>& lhs, const optional<U>& rhs ); |
(2) | (desde C++17) |
template< class T, class U > constexpr bool operator<( const optional<T>& lhs, const optional<U>& rhs ); |
(3) | (desde C++17) |
template< class T, class U > constexpr bool operator<=( const optional<T>& lhs, const optional<U>& rhs ); |
(4) | (desde C++17) |
template< class T, class U > constexpr bool operator>( const optional<T>& lhs, const optional<U>& rhs ); |
(5) | (desde C++17) |
template< class T, class U > constexpr bool operator>=( const optional<T>& lhs, const optional<U>& rhs ); |
(6) | (desde C++17) |
template< class T, std::three_way_comparable_with<T> U > constexpr std::compare_three_way_result_t<T, U> |
(7) | (desde C++20) |
Compara un objeto optional con un nullopt |
||
template< class T > constexpr bool operator==( const optional<T>& opt, std::nullopt_t ) noexcept; |
(8) | (desde C++17) |
template< class T > constexpr bool operator==( std::nullopt_t, const optional<T>& opt ) noexcept; |
(9) | (desde C++17) (hasta C++20) |
template< class T > constexpr bool operator!=( const optional<T>& opt, std::nullopt_t ) noexcept; |
(10) | (desde C++17) (hasta C++20) |
template< class T > constexpr bool operator!=( std::nullopt_t, const optional<T>& opt ) noexcept; |
(11) | (desde C++17) (hasta C++20) |
template< class T > constexpr bool operator<( const optional<T>& opt, std::nullopt_t ) noexcept; |
(12) | (desde C++17) (hasta C++20) |
template< class T > constexpr bool operator<( std::nullopt_t, const optional<T>& opt ) noexcept; |
(13) | (desde C++17) (hasta C++20) |
template< class T > constexpr bool operator<=( const optional<T>& opt, std::nullopt_t ) noexcept; |
(14) | (desde C++17) (hasta C++20) |
template< class T > constexpr bool operator<=( std::nullopt_t, const optional<T>& opt) noexcept; |
(15) | (desde C++17) (hasta C++20) |
template< class T > constexpr bool operator>( const optional<T>& opt, std::nullopt_t ) noexcept; |
(16) | (desde C++17) (hasta C++20) |
template< class T > constexpr bool operator>( std::nullopt_t, const optional<T>& opt ) noexcept; |
(17) | (desde C++17) (hasta C++20) |
template< class T > constexpr bool operator>=( const optional<T>& opt, std::nullopt_t ) noexcept; |
(18) | (desde C++17) (hasta C++20) |
template< class T > constexpr bool operator>=( std::nullopt_t, const optional<T>& opt ) noexcept; |
(19) | (desde C++17) (hasta C++20) |
template< class T > constexpr std::strong_ordering |
(20) | (desde C++20) |
Compara un objeto optional con un tipo T |
||
template< class T, class U > constexpr bool operator==( const optional<T>& opt, const U& value); |
(21) | (desde C++17) |
template< class T, class U > constexpr bool operator==( const T& value, const optional<U>& opt ); |
(22) | (desde C++17) |
template< class T, class U > constexpr bool operator!=( const optional<T>& opt, const U& value ); |
(23) | (desde C++17) |
template< class T, class U > constexpr bool operator!=( const T& value, const optional<U>& opt ); |
(24) | (desde C++17) |
template< class T, class U > constexpr bool operator<( const optional<T>& opt, const U& value ); |
(25) | (desde C++17) |
template< class T, class U > constexpr bool operator<( const T& value, const optional<U>& opt ); |
(26) | (desde C++17) |
template< class T, class U > constexpr bool operator<=( const optional<T>& opt, const U& value ); |
(27) | (desde C++17) |
template< class T, class U > constexpr bool operator<=( const T& value, const optional<U>& opt); |
(28) | (desde C++17) |
template< class T, class U > constexpr bool operator>( const optional<T>& opt, const U& value ); |
(29) | (desde C++17) |
template< class T, class U > constexpr bool operator>( const T& value, const optional<U>& opt ); |
(30) | (desde C++17) |
template< class T, class U > constexpr bool operator>=( const optional<T>& opt, const U& value ); |
(31) | (desde C++17) |
template< class T, class U > constexpr bool operator>=( const T& value, const optional<U>& opt ); |
(32) | (desde C++17) |
template< class T, std::three_way_comparable_with<T> U > constexpr std::compare_three_way_result_t<T, U> |
(33) | (desde C++20) |
Realiza operaciones de comparación en objetos optional
.
1-7) Compara dos objetos
optional
, lhs
y rhs
. Los valores contenidos se comparan (usando el operador correspondiente de T
) solo si tanto lhs
como rhs
contienen valores. De lo contrario, lhs
se considera igual arhs
si y solo si tantolhs
comorhs
no contienen un valor.lhs
se considera menor querhs
si y solo sirhs
contiene un valor ylhs
no.
8-20) Compara
opt
con un nullopt
. Equivalente a (1-6) al comparar con un optional
que no contiene un valor.21-33) Compara
opt
con un valor value
. Los valores se comparan (usando el operador correspondiente de T
) solo si opt
contiene un valor. De lo contrario, opt
se considera menor que value
. Si la expresión correspondiente de comparación de dos vías entre *opt y value no está bien formada, o si su resultado no es convertible a bool, el programa está mal formado.Contenido |
[editar] Parámetros
lhs, rhs, opt | - | Un objeto optional a comparar.
|
value | - | Valor a comparar con el valor contenido. |
[editar] Valor de retorno
1) Si bool(lhs) != bool(rhs), devuelve false
De lo contrario, si bool(lhs) == false (así que bool(rhs) == false también), devuelve true
2) Si bool(lhs) != bool(rhs), devuelve true
De lo contrario, si bool(lhs) == false (así que bool(rhs) == false también), devuelve false
3) Si bool(rhs) == false devuelve false
De lo contrario, si bool(lhs) == false, devuelve true
4) Si bool(lhs) == false devuelve true
De lo contrario, si bool(rhs) == false, devuelve false
5) Si bool(lhs) == false devuelve false
De lo contrario, si bool(rhs) == false, devuelve true
6) Si bool(rhs) == false devuelve true
De lo contrario, si bool(lhs) == false, devuelve false
7) Si bool(lhs) && bool(rhs) is true devuelve *x <=> *y
De lo contrario, devuelve bool(lhs) <=> bool(rhs)
De lo contrario, devuelve bool(lhs) <=> bool(rhs)
8-9) Devuelve !opt.
10-11) Devuelve bool(opt).
12) Devuelve false.
13) Devuelve bool(opt).
14) Devuelve !opt.
15) Devuelve true.
16) Devuelve bool(opt).
17) Devuelve false.
18) Devuelve true.
19) Devuelve !opt.
20) Devuelve bool(opt) <=> false.
21) Devuelve bool(opt) ? *opt == value : false.
22) Devuelve bool(opt) ? value == *opt : false.
23) Devuelve bool(opt) ? *opt != value : true.
24) Devuelve bool(opt) ? value != *opt : true.
25) Devuelve bool(opt) ? *opt < value : true.
26) Devuelve bool(opt) ? value < *opt : false.
27) Devuelve bool(opt) ? *opt <= value : true.
28) Devuelve bool(opt) ? value <= *opt : false.
29) Devuelve bool(opt) ? *opt > value : false.
30) Devuelve bool(opt) ? value > *opt : true.
31) Devuelve bool(opt) ? *opt >= value : false.
32) Devuelve bool(opt) ? value >= *opt : true.
33) Devuelve bool(opt) ? *opt <=> value : std::strong_ordering::less.
[editar] Excepciones
1-7) Puede lanzar excepciones definidas por la implementación.
21-33) Lanza cuando y lo que la comparación lanza.
[editar] Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
---|---|---|---|
LWG 2945 | C++17 | El orden de los parámetros de plantilla es inconsistente para los casos comparar-con-T. | Se hizo consistente. |