operator==, !=, <, <=, >, >=, <=>(std::optional)
| 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> operator<=>( const optional<T>& lhs, const optional<U>& rhs ); |
(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 operator<=>( const optional<T>& opt, std::nullopt_t ) noexcept; |
(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> 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 tantolhscomorhsno contienen un valor.lhsse considera menor querhssi y solo sirhscontiene un valor ylhsno.
opt con un nullopt. Equivalente a (1-6) al comparar con un optional que no contiene un valor.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.Parámetros
| lhs, rhs, opt | - | Un objeto optional a comparar.
|
| value | - | Valor a comparar con el valor contenido. |
Valor de retorno
bool(lhs) != bool(rhs), devuelve falseDe lo contrario, si bool(lhs) == false (así que bool(rhs) == false también), devuelve true
De lo contrario, devuelve *lhs == *rhs.
bool(lhs) != bool(rhs), devuelve trueDe lo contrario, si bool(lhs) == false (así que bool(rhs) == false también), devuelve false
De lo contrario, devuelve *lhs != *rhs.
bool(rhs) == false devuelve falseDe lo contrario, si bool(lhs) == false, devuelve true
De lo contrario, devuelve *lhs < *rhs
bool(lhs) == false devuelve trueDe lo contrario, si bool(rhs) == false, devuelve false
De lo contrario, devuelve*lhs <= *rhs
bool(lhs) == false devuelve falseDe lo contrario, si bool(rhs) == false, devuelve true
De lo contrario, devuelve *lhs > *rhs
bool(rhs) == false devuelve trueDe lo contrario, si bool(lhs) == false, devuelve false
De lo contrario, devuelve *lhs >= *rhs
bool(lhs) && bool(rhs) is true devuelve *x <=> *yDe lo contrario, devuelve bool(lhs) <=> bool(rhs)
!opt.bool(opt).false.bool(opt).!opt.true.bool(opt).false.true.!opt.bool(opt) <=> false.bool(opt) ? *opt == value : false.bool(opt) ? value == *opt : false.bool(opt) ? *opt != value : true.bool(opt) ? value != *opt : true.bool(opt) ? *opt < value : true.bool(opt) ? value < *opt : false.bool(opt) ? *opt <= value : true.bool(opt) ? value <= *opt : false.bool(opt) ? *opt > value : false.bool(opt) ? value > *opt : true.bool(opt) ? *opt >= value : false.bool(opt) ? value >= *opt : true.bool(opt) ? *opt <=> value : std::strong_ordering::less.Excepciones
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. |