operator==, !=, <, <=, >, >=, <=>(std::optional)
| Определен в заголовке <optional>
|
||
| Сравнивает два optional объекта |
||
template< class T, class U >
constexpr bool operator==( const optional<T>& lhs, const optional<U>& rhs );
|
(1) | (начиная с C++17) |
template< class T, class U >
constexpr bool operator!=( const optional<T>& lhs, const optional<U>& rhs );
|
(2) | (начиная с C++17) |
template< class T, class U >
constexpr bool operator<( const optional<T>& lhs, const optional<U>& rhs );
|
(3) | (начиная с C++17) |
template< class T, class U >
constexpr bool operator<=( const optional<T>& lhs, const optional<U>& rhs );
|
(4) | (начиная с C++17) |
template< class T, class U >
constexpr bool operator>( const optional<T>& lhs, const optional<U>& rhs );
|
(5) | (начиная с C++17) |
template< class T, class U >
constexpr bool operator>=( const optional<T>& lhs, const optional<U>& rhs );
|
(6) | (начиная с 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) | (начиная с C++20) |
| Сравнивает optional объект с nullopt |
||
template< class T >
constexpr bool operator==( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(8) | (начиная с C++17) |
template< class T >
constexpr bool operator==( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(9) | (начиная с C++17) (до C++20) |
template< class T >
constexpr bool operator!=( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(10) | (начиная с C++17) (до C++20) |
template< class T >
constexpr bool operator!=( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(11) | (начиная с C++17) (до C++20) |
template< class T >
constexpr bool operator<( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(12) | (начиная с C++17) (до C++20) |
template< class T >
constexpr bool operator<( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(13) | (начиная с C++17) (до C++20) |
template< class T >
constexpr bool operator<=( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(14) | (начиная с C++17) (до C++20) |
template< class T >
constexpr bool operator<=( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(15) | (начиная с C++17) (до C++20) |
template< class T >
constexpr bool operator>( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(16) | (начиная с C++17) (до C++20) |
template< class T >
constexpr bool operator>( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(17) | (начиная с C++17) (до C++20) |
template< class T >
constexpr bool operator>=( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(18) | (начиная с C++17) (до C++20) |
template< class T >
constexpr bool operator>=( std::nullopt_t, const optional<T>& opt ) noexcept;
|
(19) | (начиная с C++17) (до C++20) |
template< class T >
constexpr std::strong_ordering
operator<=>( const optional<T>& opt, std::nullopt_t ) noexcept;
|
(20) | (начиная с C++20) |
| Сравнивает optional объект со значением |
||
template< class T, class U >
constexpr bool operator==( const optional<T>& opt, const U& value );
|
(21) | (начиная с C++17) |
template< class U, class T >
constexpr bool operator==( const U& value, const optional<T>& opt );
|
(22) | (начиная с C++17) |
template< class T, class U >
constexpr bool operator!=( const optional<T>& opt, const U& value );
|
(23) | (начиная с C++17) |
template< class U, class T >
constexpr bool operator!=( const U& value, const optional<T>& opt );
|
(24) | (начиная с C++17) |
template< class T, class U >
constexpr bool operator<( const optional<T>& opt, const U& value );
|
(25) | (начиная с C++17) |
template< class U, class T >
constexpr bool operator<( const U& value, const optional<T>& opt );
|
(26) | (начиная с C++17) |
template< class T, class U >
constexpr bool operator<=( const optional<T>& opt, const U& value );
|
(27) | (начиная с C++17) |
template< class U, class T >
constexpr bool operator<=( const U& value, const optional<T>& opt );
|
(28) | (начиная с C++17) |
template< class T, class U >
constexpr bool operator>( const optional<T>& opt, const U& value );
|
(29) | (начиная с C++17) |
template< class U, class T >
constexpr bool operator>( const U& value, const optional<T>& opt );
|
(30) | (начиная с C++17) |
template< class T, class U >
constexpr bool operator>=( const optional<T>& opt, const U& value );
|
(31) | (начиная с C++17) |
template< class U, class T >
constexpr bool operator>=( const U& value, const optional<T>& opt );
|
(32) | (начиная с 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) | (начиная с C++20) |
Выполняет операции сравнения для объектов optional.
optional, lhs и rhs. Содержащиеся значения сравниваются (с помощью соответствующего оператора T) только если и lhs, и rhs содержат значения. В противном случае,
lhsсчитается равнымrhsтогда и только тогда, когда иlhs, иrhsне содержат значения.lhsсчитается меньшимrhsтогда и только тогда, когдаrhsсодержит значение, аlhs— нет.
@ обозначает соответствующий оператор сравнения для каждой из этих функций:
|
Если соответствующее выражение |
(до C++26) |
|
Эта перегрузка участвует в разрешении перегрузки только если соответствующее выражение |
(начиная с C++26) |
opt с nullopt. Эквивалентно (1-6) при сравнении с optional, которое не содержит значения.
|
Операторы |
(начиная с C++20) |
opt с value. Значения сравниваются (с помощью соответствующего оператора T) только если opt содержит значение. В противном случае, opt считается меньшим value.@ обозначает соответствующий оператор сравнения для каждой из этих функций:
|
Если соответствующее выражение |
(до C++26) |
|
Эта перегрузка участвует в разрешении перегрузки только если все следующие условия удовлетворены:
|
(начиная с C++26) |
Параметры
| lhs, rhs, opt | - |
объект
optional
для сравнения
|
| value | - | значение для сравнения с содержащимся значением |
Возвращаемое значение
( lhs. has_value ( ) == false ? true : * lhs == * rhs )
( lhs. has_value ( ) == false ? false : * lhs ! = * rhs )
Исключения
Примечания
| Макрос тестирования возможностей | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_constrained_equality
|
202403L
|
(C++26) | ограниченные операторы сравнения для std::optional |
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2945 | C++17 | порядок параметров шаблона непоследователен для случаев сравнения-с-T | приведён к последовательности |