operator==, !=, <, <=, >, >=, <=>(std::optional)
| Definido en el encabezado <optional>
|
||
| Comparar 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>
operator<=>( const optional<T>& lhs, const optional<U>& rhs );
|
(7) | (desde C++20) |
| Comparar 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
operator<=>( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(20) | (desde C++20) |
| Comparar un objeto optional con un valor |
||
template< class T, class U >
constexpr bool operator==( const optional<T>& opt, const U& value );
|
(21) | (desde C++17) |
template< class U, class T >
constexpr bool operator==( const U& value, const optional<T>& 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 U, class T >
constexpr bool operator!=( const U& value, const optional<T>& 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 U, class T >
constexpr bool operator<( const U& value, const optional<T>& 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 U, class T >
constexpr bool operator<=( const U& value, const optional<T>& 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 U, class T >
constexpr bool operator>( const U& value, const optional<T>& 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 U, class T >
constexpr bool operator>=( const U& value, const optional<T>& opt );
|
(32) | (desde C++17) |
template< class T, std::three_way_comparable_with<T> U >
constexpr std::compare_three_way_result_t<T, U>
operator<=>( const optional<T>& opt, const U& value );
|
(33) | (desde C++20) |
Realiza operaciones de comparación en objetos optional.
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,
lhsse considera igual arhssi, y solo si, amboslhsyrhsno contienen un valor.lhsse considera menor querhssi, y solo si,rhscontiene un valor ylhsno.
@ el operador de comparación correspondiente, para cada una de estas funciones:
|
Si la expresión correspondiente |
(hasta C++26) |
|
Esta sobrecarga participa en la resolución de sobrecargas solo si la expresión correspondiente |
(desde C++26) |
opt con un nullopt. Equivalente a (1-6) al comparar con un optional que no contiene un valor.
|
Los operadores |
(desde C++20) |
opt con un 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.@ el operador de comparación correspondiente, para cada una de estas funciones:
|
Si la expresión correspondiente |
(hasta C++26) |
|
Esta sobrecarga participa en la resolución de sobrecargas solo si se cumplen todas las condiciones siguientes:
|
(desde C++26) |
Parámetros
| lhs, rhs, opt | - |
un objeto
optional
para comparar
|
| value | - | valor para comparar con el valor contenido |
Valor de retorno
( lhs. has_value ( ) == false ? true : * lhs == * rhs )
( lhs. has_value ( ) == false ? false : * lhs ! = * rhs )
Excepciones
Notas
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_constrained_equality
|
202403L
|
(C++26) | Operadores de comparación restringidos para std::optional |
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2945 | C++17 | el orden de los parámetros de plantilla es inconsistente para los casos de comparación-con-T | hecho consistente |