operator==, !=, <, <=, >, >=(std::optional)
提供: cppreference.com
ヘッダ <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
オブジェクト、 lhs
と rhs
を比較します。 格納されている値は、 lhs
と rhs
がどちらも値を格納している場合にのみ、 (対応する T
の演算子を用いて) 比較されます。 そうでなければ、-
lhs
とrhs
がどちらも値を格納していない場合にのみ、lhs
はrhs
と等しいとみなされます。 -
rhs
は値を格納しているけれどもlhs
はそうでない場合にのみ、lhs
はrhs
より小さいとみなされます。
-
7-18)
opt
を nullopt
と比較します。 値を格納していない optional
と比較するときの (1-6) と同等です。19-30)
opt
を value
と比較します。 値は、 opt
が値を格納している場合にのみ、 (対応する T
の比較演算子を用いて) 比較されます。 そうでなければ、 opt
は value
より小さいとみなされます。 *opt と value の間の対応する比較の式が well-formed でない場合、またはその結果が bool に変換可能でない場合、動作は未定義です。目次 |
[編集] 引数
lhs, rhs, opt | - | 比較する optional オブジェクト
|
value | - | 格納されている値と比較する値 |
[編集] 戻り値
1) bool(lhs) != bool(rhs) であれば、 false を返します。
そうでなく、 bool(lhs) == false (ゆえに bool(rhs) == false でもある) であれば、 true を返します。
2) bool(lhs) != bool(rhs) であれば、 true を返します。
そうでなく、 bool(lhs) == false (ゆえに bool(rhs) == false でもある) であれば、 false を返します。
3) bool(rhs) == false であれば、 false を返します。
そうでなく、 bool(lhs) == false であれば、 true を返します。
4) bool(lhs) == false であれば、 true を返します。
そうでなく、 bool(rhs) == false であれば、 false を返します。
5) bool(lhs) == false であれば、 false を返します。
そうでなく、 bool(rhs) == false であれば、 true を返します。
6) bool(rhs) == false であれば、 true を返します。
そうでなく、 bool(lhs) == false であれば、 false を返します。
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 |