Espacios de nombres
Variantes
Acciones

operator==, !=, <, <=, >, >=, <=>(std::optional)

De cppreference.com
< cpp‎ | utility‎ | optional
 
 
Biblioteca de servicios
 
 
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.

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 a rhs si y solo si tanto lhs como rhs no contienen un valor.
  • lhs se considera menor que rhs si y solo si rhs contiene un valor y lhs 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

De lo contrario, devuelve *lhs == *rhs.
2) Si bool(lhs) != bool(rhs), devuelve true

De lo contrario, si bool(lhs) == false (así que bool(rhs) == false también), devuelve false

De lo contrario, devuelve *lhs != *rhs.
3) Si bool(rhs) == false devuelve false

De lo contrario, si bool(lhs) == false, devuelve true

De lo contrario, devuelve *lhs < *rhs
4) Si bool(lhs) == false devuelve true

De lo contrario, si bool(rhs) == false, devuelve false

De lo contrario, devuelve*lhs <= *rhs
5) Si bool(lhs) == false devuelve false

De lo contrario, si bool(rhs) == false, devuelve true

De lo contrario, devuelve *lhs > *rhs
6) Si bool(rhs) == false devuelve true

De lo contrario, si bool(lhs) == false, devuelve false

De lo contrario, devuelve *lhs >= *rhs
7) Si bool(lhs) && bool(rhs) is true devuelve *x <=> *y
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.