【共读Primer】23.<4.3> 逻辑和关系运算符 Page126
逻辑关系,相信大家都不陌生,所有的逻辑和关系的运算结果只有两种:真(true)或假(false)
逻辑关系的运算符属性通过下表来列出
结合律 | 运算符 | 功能 | 用法 |
右 | ! | 逻辑非 | !expr |
左 | < | 小于 | expr < expr |
左 | <= | 小于等于 | expr <= expr |
左 | > | 大于 | expr > expr |
左 | >= | 大于等于 | expr >= expr |
左 |
== | 相等 | expr == expr |
左 | != | 不相等 | expr != expr |
左 | && | 逻辑与 | expr && expr |
左 | || | 逻辑或 | expr || expr |
在所列出的所有逻辑与关系运算符中,优先级从上到下,以空行隔开的优先级相同。
逻辑与运算符(&&):
true && true == true ;
true && false == false;
false && false == false
逻辑或运算符(||):
true || true == true;
true || false == true;
false || false == false;
这两个运算符有一个共同的特性
短路求值
1. 对于逻辑与运算符来说,当且仅当左侧运算对象为真时才对右侧运算对象求值。
2. 对于逻辑或来说,当且仅当左侧运算对象为假时才对右侧运算对象求值。
这两条规则说起来比较拗口,而且强行记忆的话也比较麻烦,我来给大家说一个简单的方法。
所谓短路求值,它触发的条件只有一条,当右侧的结果无论为真或假都不影响最终逻辑关系结果的时候则会发生短路求值。
先来说第一条:当左侧为true时才会进行右侧运算,反之,当左侧为false时不进行右侧计算,为什么,因为任何一个false都会使逻辑结果为false,所以无论右侧的结果是什么都讲返回false,这时发生短路。
true && true == true ;
true && false == false;
再来说第二条:当左侧为false时才会计算右侧,反之,当左侧为true时不计算右侧,因为无论右侧值是什么,逻辑结果都为true
false || false == false;
false || true == true;
这种特性对我们来说有一点是值的利用的。
for (const auto &s : text) { cout << s; // 遇到空字符串或者以句号结束的字符串进行换行 if(s.empty() || s[s.size() - 1] == '.') { cout << endl; } else { cout << " "; } }
在上面的代码中我们巧妙的利用短路特性避过了下标越界的错误。
逻辑非运算
逻辑非运算是将逻辑结果取反
! true == false;
! false == true;
其余的逻辑运算符都与数学的逻辑关系类似,这里就不做记录了。
相信大家的数学水平一定比我要高。