Logical operators
逻辑运算符
返回布尔操作的结果。
Operator name | Syntax | Overloadable | Prototype examples (for class T) |
---|---|---|---|
Inside class definition | Outside class definition | ||
negation | not a !a. | Yes | bool T::operator!() const; |
AND | a and b a && b. | Yes | bool T::operator&&(const T2 &b) const; |
inclusive OR | a or b a || b. | Yes | bool T::operator||(const T2 &b) const; |
注意关键字类窗体%28和,而不是%29和符号类窗体%28&,,%21%29可以互换使用%28 See替代表示%29所有内置运算符都返回bool,大多数用户定义的重载也返回bool,这样用户定义的操作符可以与内置操作相同的方式使用。但是,在用户定义的操作符重载中,任何类型都可以用作返回类型%28,包括无效%29。Builtin运营商&和执行短路评估%28如果在计算第一个%29之后知道结果,则不要计算第二个操作数,但是重载的操作符的行为就像正则函数调用,并且总是计算两个操作数。
- 关键字类窗体%28
and
,,,or
,,,not
%29和符号样形式%28&&
,,,||
,,,!
%29可以互换使用替代表示%29
- 所有内置操作符返回
bool
,而且大多数用户定义的重载还回来bool
这样,用户定义的操作符就可以与内置操作一样使用。但是,在用户定义的操作符重载中,任何类型都可以用作返回类型%28,包括void
29%。
- Builtin算子
&&
和||
执行短路评估%28如果在计算第一个%29之后知道结果,则不要计算第二个操作数,但是重载的操作符的行为就像正则函数调用,并且总是计算两个操作数。
解释
逻辑运算符将逻辑函数%28NOT和包含或%29应用于布尔参数%28或类型上下文可转换为bool
%29,有一个布尔结果。不像位逻辑运算符,这些运算符%28在其内置形式%29中,如果在计算第一个操作数之后知道结果,则不会计算第二个操作数。
Builtin算子
以下内置函数签名参与过载解析:
bool operator!(bool) | | |
---|---|---|
bool operator&&(bool, bool) | | |
bool operator||(bool, bool) | | |
如果操作数不是bool
,它被转换为bool
使用上下文转换为bool
::只有在声明的格式良好的情况下,才是正确的。bool t(arg)
是个很好的结构,对一些人来说是暂时的t
...
对于内置逻辑NOT运算符,结果是true
如果操作数是false
.否则,结果是false
...
对于内置逻辑和运算符,结果是true
如果两个操作数都是true
.否则,结果是false
.如果第一个操作数是false
,则不计算第二个操作数。
对于内置逻辑或运算符,结果是true
如果第一个或第二个操作数%28或两者都是true
.如果第一个操作程序是true
,则不计算第二个操作数。
结果
a | true | false |
---|---|---|
!a | false | true |
and | a |
---|---|
true | false |
b | true |
false | false |
or | a |
---|---|
true | false |
b | true |
false | true |
例
二次
#include <iostream>
#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::cout << "Enter 'quit' to quit.\n";
for(std::string line; std::cout << "> "
&& std::getline(std::cin, line)
&& line != "quit"; )
;
}
二次
产出:
二次
true
Enter 'quit' to quit.
> test
> quit
二次
标准库
因为operator&&
和operator||
不适用于重载,而且由于布尔语义类型不常见,只有两个标准库类重载这些操作符:
operator! | applies a unary arithmetic operator to each element of the valarray (public member function of std::valarray) |
---|---|
operator&&operator|| | applies binary operators to each element of two valarrays, or a valarray and a value (function template) |
operator! | checks if an error has occurred (synonym of fail()) (public member function of std::basic_ios) |
另见
运算符优先...
操作者超载...
公共算子
*。
分配增量递减算术逻辑比较成员访问其他
a=b a+=b a-=b a%2A=b a/=b a%=b a&=b a=b a^=b a<=b a>>=b.+a-a+a-+a-+a-a+b a-b a%2Ab a/b a%b~a&b ab^b a<<b a>>b.%21 a&b a&b ab a=b a%21=b a<b a>b a<=b a>=b a乙%2AA&A->b A.B a->%2Ab a.%2AA%28...%29 a,b?*
特殊运算符
静态[医]强制转换将一种类型转换为另一种相关类型动态。[医]继承层次结构中的强制转换[医]强制转换添加或删除cv限定符,重新解释[医]CAST将类型转换为不相关的类型C风格的强制转换通过混合静态方式将一种类型转换为另一种类型[医]卡斯特[医]重释[医]强制转换新创建具有动态存储持续时间的对象,删除删除以前由新表达式创建的对象,并释放获得的内存区域大小查询类型的大小...查询参数Pack%28的大小,因为C++11%29 Tyid查询类型no的类型信息,除了检查。表达式可以抛出异常%28,因为C++11%29查询对齐要求类型为%28,因为C++11%29。
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。