逻辑运算符
返回布尔运算的结果。
运算符名称 | 语法 | 可重载 | 原型示例 (对于 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 prvalue。
对于内置逻辑非运算符,如果操作数为 false,则结果为 true。否则,结果为 false。
对于内置逻辑与运算符,如果两个操作数都为 true,则结果为 true。否则,结果为 false。此运算符是短路的:如果第一个操作数为 false,则不评估第二个操作数。
对于内置逻辑或运算符,如果第一个或第二个操作数(或两者)为 true,则结果为 true。此运算符是短路的:如果第一个操作数为 true,则不评估第二个操作数。
请注意,按位逻辑运算符不执行短路。
[编辑] 结果
a | true | false |
---|---|---|
!a | false | true |
与 | a | ||
---|---|---|---|
true | false | ||
b | true | true | false |
false | false | false |
或 | 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||
的短路特性不适用于重载,并且由于具有布尔语义的类型不常见,因此只有两个标准库类重载这些运算符
将一元算术运算符应用于 valarray 的每个元素 ( std::valarray<T> 的公共成员函数)
| |
将二元运算符应用于两个 valarray 的每个元素,或一个 valarray 和一个值 (函数模板) | |
检查是否发生错误(fail() 的同义词) ( std::basic_ios<CharT,Traits> 的公共成员函数) |
[编辑] 参见
实现 x && y 的函数对象 (类模板) | |
实现 x || y 的函数对象 (类模板) | |
实现 !x 的函数对象 (类模板) |
常用运算符 | ||||||
---|---|---|---|---|---|---|
赋值 | 递增 递减 |
算术 | 逻辑 | 比较 | 成员 访问 |
其他 |
a = b |
++a |
+a |
!a |
a == b |
a[...] |
函数调用 a(...) |
逗号 a, b | ||||||
条件 a ? b : c | ||||||
特殊运算符 | ||||||
static_cast 将一种类型转换为另一种相关类型 |
C 文档 关于 逻辑运算符
|