命名空间
变体
操作

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

来自 cppreference.com
 
 
实验性
技术规范
文件系统库 (文件系统 TS)
库基础 (库基础 TS)
库基础 2 (库基础 TS v2)
库基础 3 (库基础 TS v3)
并行扩展 (并行 TS)
并行扩展 2 (并行 TS v2)
并发扩展 (并发 TS)
并发扩展 2 (并发 TS v2)
概念 (概念 TS)
范围 (范围 TS)
反射 (反射 TS)
数学特殊函数 (特殊函数 TR)
实验性 非 TS
模式匹配
线性代数
std::execution
契约
2D 图形
 
 
 
定义在头文件 <experimental/optional>
比较两个 optional 对象
template< class T >
constexpr bool operator==( const optional<T>& lhs, const optional<T>& rhs );
(1) (库基础 TS)
template< class T >
constexpr bool operator!=( const optional<T>& lhs, const optional<T>& rhs );
(2) (库基础 TS)
template< class T >
constexpr bool operator<( const optional<T>& lhs, const optional<T>& rhs );
(3) (库基础 TS)
template< class T >
constexpr bool operator<=( const optional<T>& lhs, const optional<T>& rhs );
(4) (库基础 TS)
template< class T >
constexpr bool operator>( const optional<T>& lhs, const optional<T>& rhs );
(5) (库基础 TS)
template< class T >
constexpr bool operator>=( const optional<T>& lhs, const optional<T>& rhs );
(6) (库基础 TS)
比较 optional 对象和 nullopt
template< class T >
constexpr bool operator==( const optional<T>& opt, std::nullopt_t ) noexcept;
(7) (库基础 TS)
template< class T >
constexpr bool operator==( std::nullopt_t, const optional<T>& opt ) noexcept;
(8) (库基础 TS)
template< class T >
constexpr bool operator!=( const optional<T>& opt, std::nullopt_t ) noexcept;
(9) (库基础 TS)
template< class T >
constexpr bool operator!=( std::nullopt_t, const optional<T>& opt ) noexcept;
(10) (库基础 TS)
template< class T >
constexpr bool operator<( const optional<T>& opt, std::nullopt_t ) noexcept;
(11) (库基础 TS)
template< class T >
constexpr bool operator<( std::nullopt_t, const optional<T>& opt ) noexcept;
(12) (库基础 TS)
template< class T >
constexpr bool operator<=( const optional<T>& opt, std::nullopt_t ) noexcept;
(13) (库基础 TS)
template< class T >
constexpr bool operator<=( std::nullopt_t, const optional<T>& opt ) noexcept;
(14) (库基础 TS)
template< class T >
constexpr bool operator>( const optional<T>& opt, std::nullopt_t ) noexcept;
(15) (库基础 TS)
template< class T >
constexpr bool operator>( std::nullopt_t, const optional<T>& opt ) noexcept;
(16) (库基础 TS)
template< class T >
constexpr bool operator>=( const optional<T>& opt, std::nullopt_t ) noexcept;
(17) (库基础 TS)
template< class T >
constexpr bool operator>=( std::nullopt_t, const optional<T>& opt ) noexcept;
(18) (库基础 TS)
比较 optional 对象和 T
template< class T >
constexpr bool operator==( const optional<T>& opt, const T& value );
(19) (库基础 TS)
template< class T >
constexpr bool operator==( const T& value, const optional<T>& opt );
(20) (库基础 TS)
template< class T >
constexpr bool operator!=( const optional<T>& opt, const T& value );
(21) (库基础 TS)
template< class T >
constexpr bool operator!=( const T& value, const optional<T>& opt );
(22) (库基础 TS)
template< class T >
constexpr bool operator<( const optional<T>& opt, const T& value );
(23) (库基础 TS)
template< class T >
constexpr bool operator<( const T& value, const optional<T>& opt );
(24) (库基础 TS)
template< class T >
constexpr bool operator<=( const optional<T>& opt, const T& value );
(25) (库基础 TS)
template< class T >
constexpr bool operator<=( const T& value, const optional<T>& opt );
(26) (库基础 TS)
template< class T >
constexpr bool operator>( const optional<T>& opt, const T& value );
(27) (库基础 TS)
template< class T >
constexpr bool operator>( const T& value, const optional<T>& opt );
(28) (库基础 TS)
template< class T >
constexpr bool operator>=( const optional<T>& opt, const T& value );
(29) (库基础 TS)
template< class T >
constexpr bool operator>=( const T& value, const optional<T>& opt );
(30) (库基础 TS)

optional 对象执行比较操作。

1-6) 比较两个optional 对象,lhsrhs。只有当 lhsrhs 都包含值时,才会比较包含的值(对于 (1,2) 使用 operator==,对于 (3-6) 使用 operator<)。否则,
  • 仅当 lhsrhs 都没有包含值时,lhs 才被认为等于 rhs
  • 仅当 rhs 包含值且 lhs 不包含值时,lhs 才被认为小于 rhs
7-18)optnullopt 进行比较。等效于 (1-6),当比较到一个不包含值的 optional 时。
19-30)optvalue 进行比较。只有当 opt 包含值时,才会比较值(对于 (19-22) 使用 operator==,对于 (23-30) 使用 operator<)。否则,opt 被认为小于 value

[edit] 参数

lhs, rhs, opt - 要比较的 optional 对象
value - 要与包含值比较的值
类型要求
-
为了使用重载 (1,2),T 必须满足 EqualityComparable 的要求。

[edit] 返回值

1) 如果 bool(lhs) != bool(rhs),则返回 false
否则,如果 bool(lhs) == false(因此 bool(rhs) == false 也是),则返回 true
否则,返回 *lhs == *rhs.
2) 返回 !(lhs == rhs)
3) 如果 bool(rhs) == false 返回 false
否则,如果 bool(lhs) == false,则返回 true
否则返回 *x < *y.
4) 返回 !(rhs < lhs)
5) 返回 rhs < lhs.
6) 返回 !(lhs < rhs)
7,8) 返回 !opt.
9,10) 返回 bool(opt)
11) 返回 false
12) 返回 bool(opt)
13) 返回 !opt.
14) 返回 true
15) 返回 bool(opt)
16) 返回 false
17) 返回 true
18) 返回 !opt.
19) 返回 bool(opt) ? *opt == value : false
20) 返回 bool(opt) ? value == *opt : false
21) 返回 bool(opt) ? !(*opt == value) : true
22) 返回 bool(opt) ? !(value == *opt) : true
23) 返回 bool(opt) ? *opt < value : true
24) 返回 bool(opt) ? value < *opt : false
25) 返回 !(opt > value)
26) 返回 !(value > opt)
27) 返回 bool(opt) ? value < *opt : false
28) 返回 bool(opt) ? *opt < value : true
29) 返回 !(opt < value)
30) 返回 !(value < opt)

[edit] 异常

1-6) (无)
19-30) (无)