逻辑运算符
返回布尔运算的结果。
运算符名称 | 语法 | 可重载 | 原型示例(对于 class T) | |
---|---|---|---|---|
在类定义内 | 在类定义外 | |||
否定 | 非 a
!a |
是 | bool T::operator!() const; | bool operator!(const T &a); |
与 | a 并且 b
a && b |
是 | bool T::operator&&(const T2 &b) const; | bool operator&&(const T &a, const T2 &b); |
包含或 | a 或 b
a || b |
是 | 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:只有当声明 bool t(arg)
对某些虚构的临时变量 t
构成良好的形式时,它才构成良好的形式。
结果是一个 bool 右值。
对于内置的逻辑非运算符,如果操作数为 false,则结果为 true。否则,结果为 false。
对于内置的逻辑与运算符,如果两个操作数都是 true,则结果为 true。否则,结果为 false。此运算符是 短路求值:如果第一个操作数为 false,则不会对第二个操作数进行求值。
对于内置的逻辑或运算符,如果第一个或第二个操作数(或两者)为 true,则结果为 true。此运算符是短路求值:如果第一个操作数为 true,则不会对第二个操作数进行求值。
请注意,按位逻辑运算符 不执行短路求值。
[edit] 结果
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 |
在 重载解析与用户定义运算符的比较 中,以下内置函数签名参与重载解析
bool operator!(bool) |
||
bool operator&&(bool, bool) |
||
bool operator||(bool, bool) |
||
[edit] 示例
#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... >
[edit] 标准库
由于 operator&&
和 operator||
的短路求值特性不适用于重载,并且由于具有布尔语义的类型并不常见,因此只有两个标准库类重载了这些运算符
对 std::valarray<T> 的每个元素应用一元算术运算符( std::valarray<T> 的公有成员函数)
| |
对两个 valarray 的每个元素,或 valarray 和一个值应用二元运算符 (函数模板) | |
检查是否发生了错误(fail() 的同义词) ( std::basic_ios<CharT,Traits> 的公有成员函数) |
[edit] 另请参阅
实现 x && y 的函数对象 (类模板) | |
实现 x || y 的函数对象 (类模板) | |
实现 !x 的函数对象 (类模板) |
常用运算符 | ||||||
---|---|---|---|---|---|---|
赋值 | 递增 递减 |
算术 | 逻辑 | 比较 | 成员 访问 |
其他 |
a = b |
++a |
+a |
!a |
a == b |
a[...] |
函数调用 |
a(...) | ||||||
逗号 | ||||||
a, b | ||||||
条件 | ||||||
a ? b : c | ||||||
特殊运算符 | ||||||
static_cast 将一种类型转换为另一种相关类型 |
C 文档 针对 逻辑运算符
|