operator==, !=, <, <=, >, >=, <=>(std::optional)
De cppreference.com
Definido en el archivo de encabezado <optional> | ||
Compara dos objetos optional | ||
template<class T, class U > constexprbool operator==(const optional<T>& lhs, const optional<U>& rhs ); | (1) | (desde C++17) |
template<class T, class U > constexprbool operator!=(const optional<T>& lhs, const optional<U>& rhs ); | (2) | (desde C++17) |
template<class T, class U > constexprbool operator<(const optional<T>& lhs, const optional<U>& rhs ); | (3) | (desde C++17) |
template<class T, class U > constexprbool operator<=(const optional<T>& lhs, const optional<U>& rhs ); | (4) | (desde C++17) |
template<class T, class U > constexprbool operator>(const optional<T>& lhs, const optional<U>& rhs ); | (5) | (desde C++17) |
template<class T, class U > constexprbool operator>=(const optional<T>& lhs, const optional<U>& rhs ); | (6) | (desde C++17) |
template<class T, std::three_way_comparable_with<T> U > constexprstd::compare_three_way_result_t<T, U> | (7) | (desde C++20) |
Compara un objeto optional con un nullopt | ||
template<class T > constexprbool operator==(const optional<T>& opt, std::nullopt_t)noexcept; | (8) | (desde C++17) |
template<class T > constexprbool operator==(std::nullopt_t, const optional<T>& opt )noexcept; | (9) | (desde C++17) (hasta C++20) |
template<class T > constexprbool operator!=(const optional<T>& opt, std::nullopt_t)noexcept; | (10) | (desde C++17) (hasta C++20) |
template<class T > constexprbool operator!=(std::nullopt_t, const optional<T>& opt )noexcept; | (11) | (desde C++17) (hasta C++20) |
template<class T > constexprbool operator<(const optional<T>& opt, std::nullopt_t)noexcept; | (12) | (desde C++17) (hasta C++20) |
template<class T > constexprbool operator<(std::nullopt_t, const optional<T>& opt )noexcept; | (13) | (desde C++17) (hasta C++20) |
template<class T > constexprbool operator<=(const optional<T>& opt, std::nullopt_t)noexcept; | (14) | (desde C++17) (hasta C++20) |
template<class T > constexprbool operator<=(std::nullopt_t, const optional<T>& opt)noexcept; | (15) | (desde C++17) (hasta C++20) |
template<class T > constexprbool operator>(const optional<T>& opt, std::nullopt_t)noexcept; | (16) | (desde C++17) (hasta C++20) |
template<class T > constexprbool operator>(std::nullopt_t, const optional<T>& opt )noexcept; | (17) | (desde C++17) (hasta C++20) |
template<class T > constexprbool operator>=(const optional<T>& opt, std::nullopt_t)noexcept; | (18) | (desde C++17) (hasta C++20) |
template<class T > constexprbool operator>=(std::nullopt_t, const optional<T>& opt )noexcept; | (19) | (desde C++17) (hasta C++20) |
template<class T > constexprstd::strong_ordering | (20) | (desde C++20) |
Compara un objeto optional con un tipo T | ||
template<class T, class U > constexprbool operator==(const optional<T>& opt, const U& value); | (21) | (desde C++17) |
template<class T, class U > constexprbool operator==(const T& value, const optional<U>& opt ); | (22) | (desde C++17) |
template<class T, class U > constexprbool operator!=(const optional<T>& opt, const U& value ); | (23) | (desde C++17) |
template<class T, class U > constexprbool operator!=(const T& value, const optional<U>& opt ); | (24) | (desde C++17) |
template<class T, class U > constexprbool operator<(const optional<T>& opt, const U& value ); | (25) | (desde C++17) |
template<class T, class U > constexprbool operator<(const T& value, const optional<U>& opt ); | (26) | (desde C++17) |
template<class T, class U > constexprbool operator<=(const optional<T>& opt, const U& value ); | (27) | (desde C++17) |
template<class T, class U > constexprbool operator<=(const T& value, const optional<U>& opt); | (28) | (desde C++17) |
template<class T, class U > constexprbool operator>(const optional<T>& opt, const U& value ); | (29) | (desde C++17) |
template<class T, class U > constexprbool operator>(const T& value, const optional<U>& opt ); | (30) | (desde C++17) |
template<class T, class U > constexprbool operator>=(const optional<T>& opt, const U& value ); | (31) | (desde C++17) |
template<class T, class U > constexprbool operator>=(const T& value, const optional<U>& opt ); | (32) | (desde C++17) |
template<class T, std::three_way_comparable_with<T> U > constexprstd::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 quevalue
. 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. |