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 T, class U > constexpr bool operator==( const T& value, const optional<U>& opt ); | (22) | (с C++17) |
template< class T, class U > constexpr bool operator!=( const optional<T>& opt, const U& value ); | (23) | (с C++17) |
template< class T, class U > constexpr bool operator!=( const T& value, const optional<U>& opt ); | (24) | (с C++17) |
template< class T, class U > constexpr bool operator<( const optional<T>& opt, const U& value ); | (25) | (с C++17) |
template< class T, class U > constexpr bool operator<( const T& value, const optional<U>& opt ); | (26) | (с C++17) |
template< class T, class U > constexpr bool operator<=( const optional<T>& opt, const U& value ); | (27) | (с C++17) |
template< class T, class U > constexpr bool operator<=( const T& value, const optional<U>& opt ); | (28) | (с C++17) |
template< class T, class U > constexpr bool operator>( const optional<T>& opt, const U& value ); | (29) | (с C++17) |
template< class T, class U > constexpr bool operator>( const T& value, const optional<U>& opt ); | (30) | (с C++17) |
template< class T, class U > constexpr bool operator>=( const optional<T>& opt, const U& value ); | (31) | (с C++17) |
template< class T, class U > constexpr bool operator>=( const T& value, const optional<U>& 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- нет.
opt с nullopt. Эквивалентно (1-6) при сравнении с optional, не содержащим значения. | Операторы | (с C++20) |
opt с value. Значения сравниваются (используя соответствующий оператор T для данного типа) только если opt содержит значение. В противном случае opt считается меньше value. Если соответствующее выражение сравнения между *opt и value не является корректным или его результат не может быть преобразован к bool, программа не является корректной.Параметры
| lhs, rhs, opt | - | объект optional для сравнения |
| value | - | значение для сравнения с содержащимся значением |
Возвращаемое значение
bool(lhs) != bool(rhs), возвращает false.В противном случае, если bool(lhs) == false (и, следовательно, bool(rhs) == false тоже), возвращает true.
В противном случае, возвращает *lhs == *rhs.
bool(lhs) != bool(rhs), возвращает true.В противном случае, если bool(lhs) == false (и, следовательно, bool(rhs) == false тоже), возвращает false.
В противном случае, возвращает *lhs != *rhs.
bool(rhs) == false возвращает false.В противном случае, если bool(lhs) == false, возвращает true.
В противном случае возвращает *lhs < *rhs.
bool(lhs) == false возвращает true.В противном случае, если bool(rhs) == false, возвращает false.
В противном случае возвращает *lhs <= *rhs.
bool(lhs) == false возвращает false.В противном случае, если bool(rhs) == false, возвращает true.
В противном случае возвращает *lhs > *rhs.
bool(rhs) == false возвращает true.В противном случае, если bool(lhs) == false, возвращает false.
В противном случае возвращает *lhs >= *rhs.
bool(lhs) && bool(rhs) является true, возвращает *x <=> *y.В противном случае, возвращает
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. Исключения
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение при публикации | Правильное поведение |
|---|---|---|---|
| LWG 2945 | C++17 | Порядок параметров шаблона несогласован для случаев сравнения с T | согласован |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/optional/operator_cmp