Returns the result of a boolean operation.
Operator name | Syntax | Overloadable | Prototype examples (for class T ) |
|
---|---|---|---|---|
Inside class definition | Outside class definition | |||
negation |
not a
| Yes |
bool T::operator!() const; |
bool operator!(const T &a); |
AND |
a and b
| Yes |
bool T::operator&&(const T2 &b) const; |
bool operator&&(const T &a, const T2 &b); |
inclusive OR |
a or b
| Yes |
bool T::operator||(const T2 &b) const; |
bool operator||(const T &a, const T2 &b); |
Notes
|
The logic operator expressions have the form.
! rhs | (1) | |
lhs && rhs | (2) | |
lhs || rhs | (3) |
If the operand is not bool
, it is converted to bool
using contextual conversion to bool: it is only well-formed if the declaration bool t(arg)
is well-formed, for some invented temporary t
.
The result is a bool
prvalue.
For the built-in logical NOT operator, the result is true
if the operand is false
. Otherwise, the result is false
.
For the built-in logical AND operator, the result is true
if both operands are true
. Otherwise, the result is false
. This operator is short-circuiting: if the first operand is false
, the second operand is not evaluated.
For the built-in logical OR operator, the result is true
if either the first or the second operand (or both) is true
. This operator is short-circuiting: if the first operand is true
, the second operand is not evaluated.
Note that bitwise logic operators do not perform short-circuiting.
a |
true |
false |
---|---|---|
!a |
false |
true |
and |
a |
||
---|---|---|---|
true |
false |
||
b |
true |
true |
false |
false |
false |
false |
or |
a |
||
---|---|---|---|
true |
false |
||
b |
true |
true |
true |
false |
true |
false |
In overload resolution against user-defined operators, the following built-in function signatures participate in overload resolution:
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'; }
Output:
true Enter 'quit' to quit. > 3... > 2... > 1... >
Because the short-circuiting properties of operator&&
and operator||
do not apply to overloads, and because types with boolean semantics are uncommon, only two standard library classes overload these operators:
applies a unary arithmetic operator to each element of the valarray (public member function of std::valarray<T> ) |
|
applies binary operators to each element of two valarrays, or a valarray and a value (function template) |
|
checks if an error has occurred (synonym of fail() ) (public member function of std::basic_ios<CharT,Traits> ) |
Common operators | ||||||
---|---|---|---|---|---|---|
assignment |
increment decrement | arithmetic | logical | comparison |
member access | other |
|
|
|
|
|
| function call |
a(...) |
||||||
comma | ||||||
a, b |
||||||
conditional | ||||||
a ? b : c |
||||||
Special operators | ||||||
|
C documentation for Logical operators |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/language/operator_logical