在线文档教程
C++
语言 | Language

Logical operators

逻辑运算符

返回布尔操作的结果。

Operator nameSyntaxOver​load​ablePrototype examples (for class T)
Inside class definitionOutside class definition
negationnot a !a.Yesbool T::operator!() const;
ANDa and b a && b.Yesbool T::operator&&(const T2 &b) const;
inclusive ORa or b a || b.Yesbool T::operator||(const T2 &b) const;

注意关键字类窗体%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,则不计算第二个操作数。

结果

atruefalse
!afalsetrue

anda
truefalse
btrue
falsefalse

ora
truefalse
btrue
falsetrue

二次

#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。

http://en.cppreference.com/w/cpp/language/Operator[医]逻辑