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 起)
( |
对
optional
对象执行比较操作。
optional
对象
lhs
和
rhs
。仅当
lhs
和
rhs
均包含值时,才会对所含值进行比较(使用
T
的对应运算符)。否则:
- 当且仅当 lhs 和 rhs 均不包含值时,两者被视为 相等 。
- 当且仅当 rhs 包含值而 lhs 不包含值时, lhs 被视为 小于 rhs 。
|
若对应的表达式 * lhs @ * rhs 非良构或其结果不可转换为 bool ,则程序非良构。 |
(C++26 前) |
|
仅当对应的表达式 * lhs @ * rhs 良构且其结果可转换为 bool 时,此重载才参与重载决议。 |
(C++26 起) |
nullopt
进行比较。当与不包含值的
optional
比较时,等同于
(1-6)
。
|
|
(since C++20) |
T
的对应运算符)进行值比较。否则,认为
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++ 标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 2945 | C++17 | 与T类型比较场景的模板参数顺序不一致 | 已统一顺序 |