| General topics | ||||||||||||||||
| Flow control | ||||||||||||||||
| Conditional execution statements | ||||||||||||||||
| Iteration statements (loops) | ||||||||||||||||
| Jump statements | ||||||||||||||||
| Functions | ||||||||||||||||
| Function declaration | ||||||||||||||||
| Lambda function expression | ||||||||||||||||
inline specifier | ||||||||||||||||
| Dynamic exception specifications(until C++17*) | ||||||||||||||||
noexcept specifier(C++11) | ||||||||||||||||
| Exceptions | ||||||||||||||||
| Namespaces | ||||||||||||||||
| Types | ||||||||||||||||
| Specifiers | ||||||||||||||||
| ||||||||||||||||
| Storage duration specifiers | ||||||||||||||||
| Initialization | ||||||||||||||||
| Expressions | ||||||||||||||||
| Alternative representations | ||||||||||||||||
| Literals | ||||||||||||||||
| Boolean -Integer -Floating-point | ||||||||||||||||
| Character -String -nullptr(C++11) | ||||||||||||||||
| User-defined(C++11) | ||||||||||||||||
| Utilities | ||||||||||||||||
| Attributes(C++11) | ||||||||||||||||
| Types | ||||||||||||||||
typedef declaration | ||||||||||||||||
| Type alias declaration(C++11) | ||||||||||||||||
| Casts | ||||||||||||||||
| Memory allocation | ||||||||||||||||
| Classes | ||||||||||||||||
| Class-specific function properties | ||||||||||||||||
| ||||||||||||||||
| Special member functions | ||||||||||||||||
| Templates | ||||||||||||||||
| Miscellaneous | ||||||||||||||||
| General | ||||
| Literals | ||||
| Operators | ||||
| Conversions | ||||
Returns the result of a boolean operation.
| Operator name | Syntax | Overloadable | Prototype examples (forclass T) | |
|---|---|---|---|---|
| Inside class definition | Outside class definition | |||
| negation | not a !a | Yes | bool T::operator!()const; | bool operator!(const T&a); |
| AND | a and b a&& b | Yes | bool T::operator&&(const T2&b)const; | bool operator&&(const T&a,const T2&b); |
| inclusive OR | a or b a|| b | Yes | bool T::operator||(const T2&b)const; | bool operator||(const T&a,const T2&b); |
| ||||
Contents |
The logic operator expressions have the form
!rhs | (1) | ||||||||
lhs&&rhs | (2) | ||||||||
lhs||rhs | (3) | ||||||||
If the operand is notbool, it is converted tobool usingcontextual conversion to bool: it is only well-formed if the declarationbool t(arg) is well-formed, for some invented temporaryt.
The result is abool prvalue.
For the built-in logical NOT operator, the result istrue if the operand isfalse. Otherwise, the result isfalse.
For the built-in logical AND operator, the result istrue if both operands aretrue. Otherwise, the result isfalse. This operator isshort-circuiting: if the first operand isfalse, the second operand is not evaluated.
For the built-in logical OR operator, the result istrue if either the first or the second operand (or both) istrue. This operator is short-circuiting: if the first operand istrue, the second operand is not evaluated.
Note thatbitwise 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 | |
Inoverload 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 boolif( 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 boolstd::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:
trueEnter 'quit' to quit.> 3...> 2...> 1...>
Because the short-circuiting properties ofoperator&& andoperator|| 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 offail()) (public member function of std::basic_ios<CharT,Traits>)[edit] |
| function object implementingx&& y (class template)[edit] | |
| function object implementingx|| y (class template)[edit] | |
| function object implementing!x (class template)[edit] |
| Common operators | ||||||
|---|---|---|---|---|---|---|
| assignment | increment decrement | arithmetic | logical | comparison | member access | other |
a= b | ++a | +a | !a | a== b | a[...] | function call a(...) |
| comma a, b | ||||||
| conditional a? b: c | ||||||
| Special operators | ||||||
static_cast converts one type to another related type | ||||||
C documentation forLogical operators |