論理演算子
ブーリアン演算の結果を返します。
演算子の名前 | 構文 | オーバーロード可能 | プロトタイプの例 (class T に対して) | |
---|---|---|---|---|
クラス定義の内側 | クラス定義の外側 | |||
否定 | not a
|
Yes | bool T::operator!() const; | bool operator!(const T &a); |
論理積 | a and b
|
Yes | bool T::operator&&(const T2 &b) const; | bool operator&&(const T &a, const T2 &b); |
論理和 | a or b
|
Yes | bool T::operator||(const T2 &b) const; | bool operator||(const T &a, const T2 &b); |
|
目次 |
[編集] 説明
論理演算子式は以下の形式を持ちます。
! rhs
|
(1) | ||||||||
lhs && rhs
|
(2) | ||||||||
lhs || rhs
|
(3) | ||||||||
被演算子が bool でない場合、それは bool への文脈的な変換を用いて bool に変換されます。 これは何らかの架空の一時変数 t
について宣言 bool t(arg)
が well-formed である場合にのみ well-formed です。
結果は bool の prvalue です。
組み込みの論理否定演算子の場合、被演算子が false であれば結果は true であり、そうでなければ結果は false です。
組み込みの論理積演算子の場合、被演算子が両方とも true であれば結果は true であり、そうでなければ結果は false です。 この被演算子は短絡評価を行います。 1つめの被演算子が false であれば2つめの被演算子は評価されません。
組み込みの論理和演算子の場合、いずれかの被演算子 (または両方) が true であれば結果は true です。 この演算子は短絡評価を行います。 1つめの被演算子が true であれば2つめの被演算子は評価されません。
ビット単位の論理演算子は短絡評価を行わないことに注意してください。
[編集] 結果
a | true | false |
---|---|---|
!a | false | true |
&& | a | ||
---|---|---|---|
true | false | ||
b | true | true | false |
false | false | false |
|| | a | ||
---|---|---|---|
true | false | ||
b | true | true | true |
false | true | false |
ユーザ定義の演算子に対するオーバーロード解決では、以下の組み込み関数のシグネチャがオーバーロード解決に参加します。
bool operator!(bool) |
||
bool operator&&(bool, bool) |
||
bool operator||(bool, bool) |
||
[編集] 例
#include <iostream> #include <string> int main() { int n = 2; int* p = &n; // pointers are convertible to bool if( p && *p == 2 // "*p" is safe to use after "p &&" || !p && n != 2 ) // || has lower precedence than && std::cout << "true\n"; // streams are also convertible to bool std::cout << "Enter 'quit' to quit.\n"; for(std::string line; std::cout << "> " && std::getline(std::cin, line) && line != "quit"; ) ; }
出力:
true Enter 'quit' to quit. > test > quit
[編集] 標準ライブラリ
operator&&
および operator||
の短絡評価の性質がオーバーロードに適用されないため、およびブーリアンのセマンティクスを持つ型が一般的でないため、これらの演算子をオーバーロードする標準ライブラリのクラスは2つだけです。
valarray の各要素に単項算術演算子を適用します ( std::valarray<T> のパブリックメンバ関数)
| |
2つの valarray の各要素、または valarray と値に、二項演算子を適用します (関数テンプレート) | |
エラーが発生したかどうか調べます (fail() の同義語です) ( std::basic_ios<CharT,Traits> のパブリックメンバ関数)
|
[編集] 関連項目
一般的な演算子 | ||||||
---|---|---|---|---|---|---|
代入 | インクリメント デクリメント |
算術 | 論理 | 比較 | メンバアクセス | その他 |
a = b |
++a |
+a |
!a |
a == b |
a[b] |
a(...) |
特殊な演算子 | ||||||
static_cast は型を別の関連する型に変換します。 |
論理演算子 の C言語リファレンス
|