Spec-Zone.ru › C++

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.

1-7) Сравнивает два объекта optional: lhs и rhs. Содержимое сравнивается (используя соответствующий оператор T для данного типа) только если оба lhs и rhs содержат значения. В противном случае
  • lhs считается равным rhs, если и только если ни lhs, ни rhs не содержат значения.
  • lhs считается меньше rhs, если и только если rhs содержит значение, а lhs - нет.
8-20) Сравнивает opt с nullopt. Эквивалентно (1-6) при сравнении с optional, не содержащим значения.

Операторы <, <=, >, >=, и != соответственно синтезируются из operator<=> и operator==.

(с C++20)
21-33) Сравнивает opt с value. Значения сравниваются (используя соответствующий оператор T для данного типа) только если opt содержит значение. В противном случае opt считается меньше value. Если соответствующее выражение сравнения между *opt и value не является корректным или его результат не может быть преобразован к bool, программа не является корректной.

Параметры

lhs, rhs, opt - объект optional для сравнения
value - значение для сравнения с содержащимся значением

Возвращаемое значение

1) Если bool(lhs) != bool(rhs), возвращает false.

В противном случае, если bool(lhs) == false (и, следовательно, bool(rhs) == false тоже), возвращает true.
В противном случае, возвращает *lhs == *rhs.

2) Если bool(lhs) != bool(rhs), возвращает true.

В противном случае, если bool(lhs) == false (и, следовательно, bool(rhs) == false тоже), возвращает false.
В противном случае, возвращает *lhs != *rhs.

3) Если bool(rhs) == false возвращает false.

В противном случае, если bool(lhs) == false, возвращает true.
В противном случае возвращает *lhs < *rhs.

4) Если bool(lhs) == false возвращает true.

В противном случае, если bool(rhs) == false, возвращает false.
В противном случае возвращает *lhs <= *rhs.

5) Если bool(lhs) == false возвращает false.

В противном случае, если bool(rhs) == false, возвращает true.
В противном случае возвращает *lhs > *rhs.

6) Если bool(rhs) == false возвращает true.

В противном случае, если bool(lhs) == false, возвращает false.
В противном случае возвращает *lhs >= *rhs.

7) Если bool(lhs) && bool(rhs) является true, возвращает *x <=> *y.
В противном случае, возвращает bool(lhs) <=> bool(rhs).
8,9) Возвращает !opt.
10,11) Возвращает bool(opt).
12) Возвращает false.
13) Возвращает bool(opt).
14) Возвращает !opt.
15) Возвращает true.
16) Возвращает bool(opt).
17) Возвращает false.
END_OF_DOCUMENT_MARKER
18) Возвращает true.
19) Возвращает !opt.
20) Возвращает bool(opt) <=> false.
21) Возвращает bool(opt) ? *opt == value : false.
22) Возвращает bool(opt) ? value == *opt : false.
23) Возвращает bool(opt) ? *opt != value : true.
24) Возвращает bool(opt) ? value != *opt : true.
25) Возвращает bool(opt) ? *opt < value : true.
26) Возвращает bool(opt) ? value < *opt : false.
27) Возвращает bool(opt) ? *opt <= value : true.
28) Возвращает bool(opt) ? value <= *opt : false.
29) Возвращает bool(opt) ? *opt > value : false.
30) Возвращает bool(opt) ? value > *opt : true.
31) Возвращает bool(opt) ? *opt >= value : false.
32) Возвращает bool(opt) ? value >= *opt : true.
33) Возвращает bool(opt) ? *opt <=> value : std::strong_ordering::less.

Исключения

1-7) Может вызывать реализуемые исключения.
21-33) Выбрасывает исключения, когда и какие выбрасывает сравнение.

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API