論理 AND 演算子: &&
構文
logical-and-expression
:
equality-expression
logical-and-expression
&&
equality-expression
解説
論理 AND 演算子 (&&
) は、両方のオペランドが true
の場合は true
を返し、それ以外の場合は false
を返します。 オペランドは、評価前に bool
型に暗黙的に変換され、結果は bool
型になります。 論理 AND には左から右方向の結合規則があります。
論理 AND 演算子のオペランドは、同じ型である必要はありませんが、ブール型、整数型、またはポインター型である必要があります。 オペランドは一般に関係式または等価式です。
最初のオペランドが完全に評価され、すべての副作用が完了した後で、論理 AND 式の評価が続行されます。
2 番目のオペランドは、最初のオペランドが true
(ゼロ以外) と評価された場合にのみ、評価されます。 この評価では、論理 AND 式が false
の場合に 2 番目のオペランドの不必要な評価が行われないようになっています。 このショート サーキット評価を使用して、次の例に示すように、null ポインターの逆参照を防止できます。
char *pch = 0;
// ...
(pch) && (*pch = 'a');
pch
が null (0) であれば、式の右側は評価されません。 このショートサーキット評価では、null ポインターを介した代入が不可能になります。
&&
の演算子キーワード
C++ では、&&
の代替スペルとして and
が指定されます。 C では、<iso646.h> ヘッダーにマクロとして代替スペルが指定されています。 C++ では、代替スペルはキーワードであり、<iso646.h> や C++ でそれに相当する <ciso646> の使用は非推奨です。 Microsoft C++ では、/permissive-
または /Za
コンパイラ オプションを使用して、代替スペルを有効にする必要があります。
例
// expre_Logical_AND_Operator.cpp
// compile with: /EHsc
// Demonstrate logical AND
#include <iostream>
using namespace std;
int main() {
int a = 5, b = 10, c = 15;
cout << boolalpha
<< "The true expression "
<< "a < b && b < c yields "
<< (a < b && b < c) << endl
<< "The false expression "
<< "a > b && b < c yields "
<< (a > b && b < c) << endl;
}