名前空間
変種
操作

論理演算子

From cppreference.com
< cpp‎ | language
 
 
C++言語
全般
フロー制御
条件実行文
if
繰り返し文 (ループ)
for
範囲for (C++11)
ジャンプ文
関数
関数宣言
ラムダ式
inline指定子
動的例外仕様 (C++17まで*)
noexcept指定子 (C++11)
例外
名前空間
指定子
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点数
文字 - 文字列 - nullptr (C++11)
ユーザー定義 (C++11)
ユーティリティ
属性 (C++11)
typedef宣言
型エイリアス宣言 (C++11)
キャスト
メモリ確保
クラス
クラス固有の関数プロパティ
explicit (C++11)
static

特殊メンバ関数
テンプレート
その他
 
 

ブール演算の結果を返します。

演算子名 構文 オーバーロード可能 プロトタイプ例 (class T の場合)
クラス定義内 クラス定義外
negation not a

!a

はい bool T::operator!() const; bool operator!(const T &a);
AND a and b

a && b

はい bool T::operator&&(const T2 &b) const; bool operator&&(const T &a, const T2 &b);
包含的 OR a or b

a || b

はい bool T::operator||(const T2 &b) const; bool operator||(const T &a, const T2 &b);
注釈
  • キーワード形式 (and, or, not) と記号形式 (&&, ||, !) は、相互に置き換え可能です (「代替表現」を参照)。
  • すべての組み込み演算子は bool を返し、ほとんどのユーザー定義オーバーロードbool を返すため、ユーザー定義演算子を組み込み演算子と同じように使用できます。ただし、ユーザー定義演算子オーバーロードでは、任意の型を戻り値の型として使用できます (void を含む)。
  • 組み込み演算子 `&&` と `||` はショートサーキット評価を実行します (最初のオペランドを評価した後に結果が分かっている場合、2 番目のオペランドは評価されません)。しかし、オーバーロードされた演算子は通常の関数呼び出しのように動作し、常に両方のオペランドを評価します。

目次

[編集] 説明

論理演算子式は、次の形式をとります。

! rhs (1)
lhs && rhs (2)
lhs || rhs (3)
1) 論理NOT
2) 論理AND
3) 論理包含OR

オペランドが bool でない場合、bool への文脈的変換 を使用して bool に変換されます。これは、一時変数 `t` のために `bool t(arg)` の宣言が整形式である場合にのみ整形式です。

結果は bool の prvalue です。

組み込みの論理NOT演算子の場合、オペランドが false であれば結果は true です。そうでなければ、結果は false です。

組み込みの論理AND演算子の場合、両方のオペランドが true であれば結果は true です。そうでなければ、結果は false です。この演算子は短絡評価されます。最初のオペランドが false の場合、2 番目のオペランドは評価されません。

組み込みの論理OR演算子の場合、最初のオペランドまたは2番目のオペランド(あるいはその両方)がtrueであれば、結果はtrueです。この演算子は短絡評価されます。最初のオペランドがtrueであれば、2番目のオペランドは評価されません。

ビットごとの論理演算子は短絡評価を行わないことに注意してください。

[編集] 結果

a true false
!a false true
および a
true false
b true true false
false false false
or a
true false
b true true true
false true false

ユーザー定義演算子のオーバーロード解決において、以下の組み込み関数シグネチャがオーバーロード解決に参加します。

bool operator!(bool)
bool operator&&(bool, bool)
bool operator||(bool, bool)

[編集]

#include <iostream>
#include <sstream>
#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::stringstream cin;
    cin << "3...\n" << "2...\n" << "1...\n" << "quit";
    std::cout << "Enter 'quit' to quit.\n";
    for (std::string line;    std::cout << "> "
                           && std::getline(cin, line)
                           && line != "quit";)
        std::cout << line << '\n';
}

出力

true
Enter 'quit' to quit.
> 3...
> 2...
> 1...
>

[編集] 標準ライブラリ

`operator&&` と `operator||` の短絡評価の特性はオーバーロードには適用されず、また論理型を持つ型は一般的ではないため、これらの演算子をオーバーロードする標準ライブラリクラスは2つしかありません。

valarrayの各要素に単項算術演算子を適用する
(`std::valarray` の公開メンバ関数)
2つのvalarray、またはvalarrayと値の各要素に二項演算子を適用する
(関数テンプレート)
エラーが発生したかを確認する (fail() のシノニム)
(std::basic_ios<CharT,Traits> の public メンバ関数) [編集]

[編集] 関連項目

演算子の優先順位

演算子のオーバーロード

x && y を実装する関数オブジェクト
(クラステンプレート) [編集]
x || y を実装する関数オブジェクト
(クラステンプレート) [編集]
!x を実装する関数オブジェクト
(クラステンプレート) [編集]
共通の演算子
代入 インクリメント
デクリメント
算術 論理 比較 メンバ
アクセス
その他

a = b
a += b
a -= b
a *= b
a /= b
a %= b
a &= b
a |= b
a ^= b
a <<= b
a >>= b

++a
--a
a++
a--

+a
-a
a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b

!a
a && b
a || b

a == b
a != b
a < b
a > b
a <= b
a >= b
a <=> b

a[...]
*a
&a
a->b
a.b
a->*b
a.*b

関数呼び出し

a(...)
コンマ

a, b
conditional

a ? b : c
特殊な演算子

static_castは、ある型を関連する別の型に変換する
dynamic_castは、継承階層内で変換する
const_castは、cv修飾子を追加または削除する
reinterpret_castは、型を関連のない型に変換する
C形式のキャストは、static_castconst_castreinterpret_castの組み合わせによって、ある型を別の型に変換する
newは、動的ストレージ期間を持つオブジェクトを作成する
deleteは、new式によって以前に作成されたオブジェクトを破棄し、取得したメモリ領域を解放する
sizeofは、型のサイズを問い合わせる
sizeof...は、パラメータパックのサイズを問い合わせる (C++11以降)
typeidは、型の型情報を問い合わせる
noexceptは、式が例外を投げる可能性があるかどうかをチェックする (C++11以降)
alignofは、型のアライメント要件を問い合わせる (C++11以降)

論理演算子に関するC ドキュメント
English 日本語 中文(简体) 中文(繁體)