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
>
|
(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
|
(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
>
|
(33) | (начиная с C++20) |
Выполняет операции сравнения для объектов
optional
.
optional
,
lhs
и
rhs
. Содержимое сравнивается (с использованием соответствующего оператора
T
) только если оба
lhs
и
rhs
содержат значения. В противном случае,
- lhs считается равным rhs тогда и только тогда, когда оба lhs и rhs не содержат значения.
- lhs считается меньшим чем rhs тогда и только тогда, когда rhs содержит значение, а lhs — нет.
|
Если соответствующее выражение * lhs @ * rhs является некорректным или его результат не конвертируется в bool , программа является некорректной. |
(до C++26) |
|
Эта перегрузка участвует в разрешении перегрузки только если соответствующее выражение * lhs @ * rhs является корректным и его результат конвертируется в bool . |
(начиная с C++26) |
nullopt
. Эквивалентно
(1-6)
при сравнении с
optional
, который не содержит значения.
|
Операторы
|
(since C++20) |
T
) только если
opt
содержит значение. В противном случае
opt
считается
меньшим чем
value
.
|
Если соответствующее выражение * opt @ value или value @ * opt (в зависимости от позиции операндов) является некорректным или его результат не конвертируется в bool , программа является некорректной. |
(до 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 | приведён к последовательности |