Пространства имён
Варианты
Действия

operator==, !=, <, <=, >, >=, <=>(std::optional)

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
std::optional
Функции-элементы
Наблюдатели
Монадические операции
Модификаторы
Функции, не являющиеся элементами
Правила вывода
Вспомогательные классы
Вспомогательные объекты
 
<tbody> </tbody>
Определено в заголовочном файле <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.

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.
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++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 2945 C++17 порядок параметров шаблона несовместим для случаев сравнения с T сделан совместимым