名前空間
変種
操作

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

提供: cppreference.com
< cpp‎ | utility‎ | optional
 
 
 
 
ヘッダ <optional> で定義
2つの 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以上)
optional オブジェクトと nullopt の比較
template< class T >
constexpr bool operator==( const optional<T>& opt, std::nullopt_t ) noexcept;
(7) (C++17以上)
template< class T >
constexpr bool operator==( std::nullopt_t, const optional<T>& opt ) noexcept;
(8) (C++17以上)
template< class T >
constexpr bool operator!=( const optional<T>& opt, std::nullopt_t ) noexcept;
(9) (C++17以上)
template< class T >
constexpr bool operator!=( std::nullopt_t, const optional<T>& opt ) noexcept;
(10) (C++17以上)
template< class T >
constexpr bool operator<( const optional<T>& opt, std::nullopt_t ) noexcept;
(11) (C++17以上)
template< class T >
constexpr bool operator<( std::nullopt_t, const optional<T>& opt ) noexcept;
(12) (C++17以上)
template< class T >
constexpr bool operator<=( const optional<T>& opt, std::nullopt_t ) noexcept;
(13) (C++17以上)
template< class T >
constexpr bool operator<=( std::nullopt_t, const optional<T>& opt) noexcept;
(14) (C++17以上)
template< class T >
constexpr bool operator>( const optional<T>& opt, std::nullopt_t ) noexcept;
(15) (C++17以上)
template< class T >
constexpr bool operator>( std::nullopt_t, const optional<T>& opt ) noexcept;
(16) (C++17以上)
template< class T >
constexpr bool operator>=( const optional<T>& opt, std::nullopt_t ) noexcept;
(17) (C++17以上)
template< class T >
constexpr bool operator>=( std::nullopt_t, const optional<T>& opt ) noexcept;
(18) (C++17以上)
optional オブジェクトと T の比較
template< class T, class U >
constexpr bool operator==( const optional<T>& opt, const U& value);
(19) (C++17以上)
template< class T, class U >
constexpr bool operator==( const T& value, const optional<U>& opt );
(20) (C++17以上)
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以上)

optional オブジェクトの比較操作を行います。

1-6) 2つの optional オブジェクト、 lhsrhs を比較します。 格納されている値は、 lhsrhs がどちらも値を格納している場合にのみ、 (対応する T の演算子を用いて) 比較されます。 そうでなければ、
  • lhsrhs がどちらも値を格納していない場合にのみ、 lhsrhs等しいとみなされます。
  • rhs は値を格納しているけれども lhs はそうでない場合にのみ、 lhsrhs より小さいとみなされます。
7-18) optnullopt と比較します。 値を格納していない optional と比較するときの (1-6) と同等です。
19-30) optvalue と比較します。 値は、 opt が値を格納している場合にのみ、 (対応する T の比較演算子を用いて) 比較されます。 そうでなければ、 optvalue より小さいとみなされます。 *optvalue の間の対応する比較の式が well-formed でない場合、またはその結果が 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-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) bool(opt) ? *opt <= value : true を返します。
26) bool(opt) ? value <= *opt : false を返します。
27) bool(opt) ? *opt > value  : false を返します。
28) bool(opt) ? value > *opt  : true を返します。
29) bool(opt) ? *opt >= value : false を返します。
30) bool(opt) ? value >= *opt : true を返します。

[編集] 例外

1-6, 19-30) (なし)

[編集] 欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
LWG 2945 C++17 order of template parameters inconsistent for compare-with-T cases made consistent