operator==, !=, <, <=, >, >=, <=>(std::optional)
| Défini dans l'en-tête <optional>
|
||
| Compare deux optional objets |
||
template< class T, class U >
constexpr bool operator==( const optional<T>& lhs, const optional<U>& rhs );
|
(1) | (depuis C++17) |
template< class T, class U >
constexpr bool operator!=( const optional<T>& lhs, const optional<U>& rhs );
|
(2) | (depuis C++17) |
template< class T, class U >
constexpr bool operator<( const optional<T>& lhs, const optional<U>& rhs );
|
(3) | (depuis C++17) |
template< class T, class U >
constexpr bool operator<=( const optional<T>& lhs, const optional<U>& rhs );
|
(4) | (depuis C++17) |
template< class T, class U >
constexpr bool operator>( const optional<T>& lhs, const optional<U>& rhs );
|
(5) | (depuis C++17) |
template< class T, class U >
constexpr bool operator>=( const optional<T>& lhs, const optional<U>& rhs );
|
(6) | (depuis 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) | (depuis C++20) |
| Compare un optional objet avec un nullopt |
||
template< class T >
constexpr bool operator==( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(8) | (depuis C++17) |
template< class T >
constexpr bool operator==( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(9) | (depuis C++17) (jusqu'à C++20) |
template< class T >
constexpr bool operator!=( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(10) | (depuis C++17) (jusqu'à C++20) |
template< class T >
constexpr bool operator!=( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(11) | (depuis C++17) (jusqu'à C++20) |
template< class T >
constexpr bool operator<( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(12) | (depuis C++17) (jusqu'à C++20) |
template< class T >
constexpr bool operator<( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(13) | (depuis C++17) (jusqu'à C++20) |
template< class T >
constexpr bool operator<=( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(14) | (depuis C++17) (jusqu'à C++20) |
template< class T >
constexpr bool operator<=( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(15) | (depuis C++17) (jusqu'à C++20) |
template< class T >
constexpr bool operator>( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(16) | (depuis C++17) (jusqu'à C++20) |
template< class T >
constexpr bool operator>( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(17) | (depuis C++17) (jusqu'à C++20) |
template< class T >
constexpr bool operator>=( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(18) | (depuis C++17) (jusqu'à C++20) |
template< class T >
constexpr bool operator>=( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(19) | (depuis C++17) (jusqu'à C++20) |
template< class T >
constexpr std::strong_ordering
operator<=>( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(20) | (depuis C++20) |
| Compare un optional objet avec une valeur |
||
template< class T, class U >
constexpr bool operator==( const optional<T>& opt, const U& value );
|
(21) | (depuis C++17) |
template< class U, class T >
constexpr bool operator==( const U& value, const optional<T>& opt );
|
(22) | (depuis C++17) |
template< class T, class U >
constexpr bool operator!=( const optional<T>& opt, const U& value );
|
(23) | (depuis C++17) |
template< class U, class T >
constexpr bool operator!=( const U& value, const optional<T>& opt );
|
(24) | (depuis C++17) |
template< class T, class U >
constexpr bool operator<( const optional<T>& opt, const U& value );
|
(25) | (depuis C++17) |
template< class U, class T >
constexpr bool operator<( const U& value, const optional<T>& opt );
|
(26) | (depuis C++17) |
template< class T, class U >
constexpr bool operator<=( const optional<T>& opt, const U& value );
|
(27) | (depuis C++17) |
template< class U, class T >
constexpr bool operator<=( const U& value, const optional<T>& opt );
|
(28) | (depuis C++17) |
template< class T, class U >
constexpr bool operator>( const optional<T>& opt, const U& value );
|
(29) | (depuis C++17) |
template< class U, class T >
constexpr bool operator>( const U& value, const optional<T>& opt );
|
(30) | (depuis C++17) |
template< class T, class U >
constexpr bool operator>=( const optional<T>& opt, const U& value );
|
(31) | (depuis C++17) |
template< class U, class T >
constexpr bool operator>=( const U& value, const optional<T>& opt );
|
(32) | (depuis 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) | (depuis C++20) |
Effectue des opérations de comparaison sur les optional objets.
optional objets, lhs et rhs. Les valeurs contenues sont comparées (en utilisant l'opérateur correspondant de T) seulement si lhs et rhs contiennent tous deux des valeurs. Sinon,
lhsest considéré égal àrhssi, et seulement si,lhsetrhsne contiennent pas tous deux de valeur.lhsest considéré inférieur àrhssi, et seulement si,rhscontient une valeur etlhsn'en contient pas.
@ l'opérateur de comparaison correspondant, pour chacune de ces fonctions :
|
Si l'expression correspondante |
(jusqu'à C++26) |
|
Cette surcharge participe à la résolution de surcharge seulement si l'expression correspondante |
(depuis C++26) |
opt avec un nullopt. Équivalent à (1-6) lors de la comparaison avec un optional qui ne contient pas de valeur.
|
Les opérateurs |
(depuis C++20) |
opt avec une value. Les valeurs sont comparées (en utilisant l'opérateur correspondant de T) seulement si opt contient une valeur. Sinon, opt est considéré inférieur à value.@ l'opérateur de comparaison correspondant, pour chacune de ces fonctions :
|
Si l'expression correspondante |
(jusqu'à C++26) |
|
Cette surcharge participe à la résolution de surcharge seulement si toutes les conditions suivantes sont satisfaites :
|
(depuis C++26) |
Paramètres
| lhs, rhs, opt | - |
un objet
optional
à comparer
|
| value | - | valeur à comparer avec la valeur contenue |
Valeur de retour
( lhs. has_value ( ) == false ? true : * lhs == * rhs )
( lhs. has_value ( ) == false ? false : * lhs ! = * rhs )
` pour le code C++. Seul le numéro "32)" a été conservé tel quel car il fait partie de la numérotation et ne nécessite pas de traduction.
Exceptions
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_constrained_equality
|
202403L
|
(C++26) | opérateurs de comparaison contraints pour std::optional |
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 2945 | C++17 | ordre des paramètres de template incohérent pour les cas de comparaison-avec-T | rendu cohérent |