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 с value |
||
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++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 2945 | C++17 | порядок параметров шаблона несовместим для случаев сравнения с T | сделан совместимым |