C++ Primer 笔记十六 逻辑与关系运算符
作用类型 | 返回值 | 求值结果 | |
逻辑运算符 | 任意能转换成布尔类型的类型 | 布尔类型 ( 0:假; 1:真) | 右值 |
关系运算符 | 算术类型或指针类型 |
逻辑运算符与关系运算符 | ||||
---|---|---|---|---|
优先级 | 结合率 | 运算符 | 功能 | 用法 |
| | | | | | | ▼ | 右 | ! | 逻辑非 | !expr |
左 左 左 左 | < <= > >= | 小于 小于等于 大于 大于等于 | expr < expr expr <= expr expr > expr expr >= expr | |
左 左 | == != | 相等 不相等 | expr == expr expr != expr | |
左 | && | 逻辑与 | expr && expr | |
左 | || | 逻辑或 | expr || expr |
逻辑运算符
- 逻辑与(
&&
):两个运算对象都为真时结果为真。 - 逻辑或(
||
):两个运算对象都为假时结果为假。 - 逻辑非(
!
):将运算对象的值取反后返回。
短路求值:
- 逻辑与(
&&
):当且仅当左侧运算对象为真时才对右侧运算对象求值。 - 逻辑或(
||
):当且仅当左侧运算对象为假时才对右侧运算对象求值。
- 输出 vector 对象 text 中的 string 对象的内容,在遇到空字符串或以句号结束的字符串时换行,否则用空格隔开。
for (const auto &s :text) {
cout << s;
// 先检查 s 是否非空,只有 s 非空时才会用下标运算符去访问
if (s.empty() || s[s.size()-1] == '.')
cout << endl;
else
cout << " ";
- 打印 vector 对象 vec 的首元素(如果有的话),vector 中的元素类型为 int 。
if (!vec.empty())
cout << vec[0];
关系运算符
- 关系运算符连用产生的意外:
// i 和 j 比较返回布尔值,k 其实是和 0 或者 1 比较
if (i < j < k )
- 测试一个算术对象或指针对象的真值,直接将其作为 if 语句的条件:
if (val) { /* .. */ }
if (!val) { /* .. */ }
不要直接与 ture 进行比较,若 val 不是布尔值,则比较之前会把 true 转换成 val 的类型:
// 不建议的行为
if (val == true) { /*.. */ }
// 如果想判断 val 的值是否为 1,直接与 1 进行比较
if (val == 1) { /* .. */