C++Primer 4.3 逻辑和关系运算符 4.4赋值运算符 4.5 递增递减运算符 4.6成员访问运算符 知识点+练习题

26f1224156604646b47384733881ac15.png

 4.3 逻辑和关系运算符 

1.用&&保证不越界

if(index!=s.size()&&!isspace(s[index]);
判断s中的字符是否不是空白字符,前面index若到最后了直接不进代码块,避免越界

2.范围for中不修改但用常量引用:避免浪费内存空间 

for(const suto &s:text)
{
    cout<<s;
    if(s.empty()||s[s.size()-1]=='.')
    {
        cout<<endl;
    }
    else
    {
        cout<<" ";
    }
}
text是vector<string> 类型
遇到空字符串或以句号结尾的字符串进行换行
text中的字符串可能有很多,不加引用每次都拷贝一份出来太浪费内存,也影响cpu执行效率
又不想通过s修改字符串,所以const aotu &s,常量引用

3.!vec.empty() 非空

4.判断i<k,并且k>j

if(i<j<k)
i<j 真 bool与int比 先转换 1<K
i<j 假 bool与int比 先转换 0<K
正确:i<j&&j<k

5.真值比较

if(val==true)
不好!
1.没有(val)简洁
2.!!!如果val不是bool值,则只有val==1时才为真(实际上不为0就为真)
  val与true比较,val是int,则bool转为int,转为1 val只有==1才为真,失去原来的意义
除非val是布尔类型,不然不要这样写

4.4 赋值运算符

1.类型不同,右侧转为左侧

k=0;
k=3.14;
k为3

2.窄化转换:对于内置类型的变量,使用{}赋初值,若存在丢失信息风险会报错

k={3.14};编译器报错
!!!对于内置类型的变量,使用{}赋初值,若存在丢失信息风险会报错

 3.vector可用{}赋值是重载了=和{},其若为<int> 不赋初值为0

4.右结合律

int ival,jival;
ival=jval=0;
先jval=0;
再ival=jval;
所以ival=0;

5.while((i=get_value())!=42) 加括号 

6.混淆==与=

这样用
if(3==i)
一旦混淆3=i,编译器还会报错

4.5 递增与递减运算符 

1.*it++,见之前文章有详细讲解:C++ Primer 4.1 基础 4.2 算数运算符-CSDN博客

2.求值顺序:C++ Primer 4.1 基础 4.2 算数运算符-CSDN博客

4.6 成员访问运算符

1.*的优先级优于.

练习题

4.9 有疑问未解决:*cp是H吗 是H 问题已解决

#include<iostream>

using namespace std;

int main(void)
{
    const char* cp="hello";
    cout<<*cp;
    if(cp&&*cp)
    {

    }
    return 0;
}

判断条件是 cp不为空指针,cp的值不为空

4.12

i!=j<k
!!! 先看优先级
<优先级更高
最后判断是(j<k是真是假)
i!=0
i!=1

 4.18 结果:少输出一个,造成越界

                   因为*++ptr 是先++再返回

4.20 (f)

iter++->empty()
判断iter指向的字符串是否为空,若真,再加加
优先级:->优于++
后置++优于前置++

更新

12.29 更新4.9未解决的问题 *cp就是H 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值