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

来自cppreference.com
< cpp‎ | utility‎ | variant
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(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::variant
成员函数
观察器
修改器
非成员函数
operator==operator!=operator<operator<=operator>operator>=operator<=>
(C++20)
辅助类
辅助对象
 
在标头 <variant> 定义
template< class... Types >

constexpr bool operator==( const std::variant<Types...>& v,

                           const std::variant<Types...>& w );
(1) (C++17 起)
template< class... Types >

constexpr bool operator!=( const std::variant<Types...>& v,

                           const std::variant<Types...>& w );
(2) (C++17 起)
template< class... Types >

constexpr bool operator<( const std::variant<Types...>& v,

                          const std::variant<Types...>& w );
(3) (C++17 起)
template< class... Types >

constexpr bool operator>( const std::variant<Types...>& v,

                          const std::variant<Types...>& w );
(4) (C++17 起)
template< class... Types >

constexpr bool operator<=( const std::variant<Types...>& v,

                           const std::variant<Types...>& w );
(5) (C++17 起)
template< class... Types >

constexpr bool operator>=( const std::variant<Types...>& v,

                           const std::variant<Types...>& w );
(6) (C++17 起)
template< class... Types >

constexpr std::common_comparison_category_t<
    std::compare_three_way_result_t<Types>...>
    operator<=>( const std::variant<Types...>& v,

                 const std::variant<Types...>& w );
(7) (C++20 起)
1) variant 的相等运算符:
2) variant 的不相等运算符:
3) variant 的小于运算符:
  • w.valueless_by_exception() ,则返回 false
  • 否则,若 v.valueless_by_exception() ,则返回 true
  • 否则,若 v.index() < w.index() ,则返回true
  • 否则,若 v.index() > w.index() ,则返回false
  • 否则返回 *std::get_if<v.index()>(std::addressof(v)) < *std::get_if<v.index()>(std::addressof(w)) 。若对于任何一个 i*std::get_if<i>(std::addressof(v)) < *std::get_if<i>(std::addressof(w)) 不是返回值能转换为 bool 的合法表达式,则行为未定义 (C++20 前)程序非良构 (C++20 起)
4) variant 的大于运算符:
  • v.valueless_by_exception() ,则返回 false
  • 否则,若 w.valueless_by_exception() ,则返回 true
  • 否则,若 v.index() > w.index() ,则返回 true
  • 否则,若 v.index() < w.index() ,则返回 false
  • 否则返回 *std::get_if<v.index()>(std::addressof(v)) > *std::get_if<v.index()>(std::addressof(w)) 。若对于任何一个 i*std::get_if<i>(std::addressof(v)) > *std::get_if<i>(std::addressof(w)) 不是返回值能转换为 bool 的合法表达式,则行为未定义 (C++20 前)程序非良构 (C++20 起)
5) variant 的小于或等于运算符:
  • v.valueless_by_exception() ,则返回 true
  • 否则,若 w.valueless_by_exception() ,则返回 false
  • 否则,若 v.index() < w.index() ,则返回true
  • 否则,若 v.index() > w.index() ,则返回false
  • 否则返回 *std::get_if<v.index()>(std::addressof(v)) <= *std::get_if<v.index()>(std::addressof(w)) 。若对于任何一个 i*std::get_if<i>(std::addressof(v)) <= *std::get_if<i>(std::addressof(w)) 不是返回值能转换为 bool 的合法表达式,则行为未定义 (C++20 前)程序非良构 (C++20 起)
6) variant 的大于或等于运算符:
  • w.valueless_by_exception() ,则返回 true
  • 否则,若 v.valueless_by_exception() ,则返回 false
  • 否则,若 v.index() > w.index() ,则返回 true
  • 否则,若 v.index() < w.index() ,则返回 false
  • 否则返回 *std::get_if<v.index()>(std::addressof(v)) >= *std::get_if<v.index()>(std::addressof(w)) 。若对于任何一个 i*std::get_if<i>(std::addressof(v)) >= *std::get_if<i>(std::addressof(w)) 不是返回值能转换为 bool 的合法表达式,则行为未定义 (C++20 前)程序非良构 (C++20 起)
7) variant 的三路比较运算符:
  • v.valueless_by_exception()w.valueless_by_exception() 均为 true ,则返回 std::strong_ordering::equal
  • 否则,若 v.valueless_by_exception()true ,则返回 std::strong_ordering::less
  • 否则,若 w.valueless_by_exception()true ,则返回 std::strong_ordering::greater
  • 否则,若 v.index() != w.index() ,则返回 v.index() <=> w.index()
  • 否则等价于 *std::get_if<v.index()>(std::addressof(v)) <=> *std::get_if<v.index()>(std::addressof(w))

参数

v,w - 要比较的 variant

返回值

描述于上的比较结果。

示例

参阅

(C++17)(C++17)(C++17)(C++17)(C++17)(C++17)(C++20)
比较 optional 对象
(函数模板)