首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Logical operators

返回布尔操作的结果。

Operator name

Syntax

Over​load​able

Prototype examples (for class 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);

注意关键字类窗体%28和,而不是%29和符号类窗体%28&,,%21%29可以互换使用%28 See替代表示%29所有内置运算符都返回bool,大多数用户定义的重载也返回bool,这样用户定义的操作符可以与内置操作相同的方式使用。但是,在用户定义的操作符重载中,任何类型都可以用作返回类型%28,包括无效%29。Builtin运营商&和执行短路评估%28如果在计算第一个%29之后知道结果,则不要计算第二个操作数,但是重载的操作符的行为就像正则函数调用,并且总是计算两个操作数。

  • 关键字类窗体%28and,,,or,,,not%29和符号样形式%28&&,,,||,,,!%29可以互换使用替代表示%29
  • 所有内置操作符返回bool,而且大多数用户定义的重载还回来bool这样,用户定义的操作符就可以与内置操作一样使用。但是,在用户定义的操作符重载中,任何类型都可以用作返回类型%28,包括void29%。
  • 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

true

false

false

false

false

or

a

true

false

b

true

true

true

false

true

false

二次

代码语言:javascript
复制
#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"; )
        ;
}

二次

产出:

二次

代码语言:javascript
复制
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。

代码语言:txt
复制
 © cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

扫码关注腾讯云开发者

领取腾讯云代金券