面向对象的嵌入式软件开发(第三周学习记录)

面向对象的嵌入式软件开发(第三周学习记录)

  • C++的输入和输出
    cin:对象(变量) >> 输入流
    cout:对象(变量) << 输出流 [有缓冲区,类型是行缓冲区]
    cerr:输出(错误信息) [无缓冲区]
    clog:输出(日志信息) [无缓冲区]
  • 缓冲区
    缓冲区:在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区
    \n ,endl(刷新缓冲区并加入“\n”)
    作用:输出调试中确保输出
  • for语句升级
    for语句升级:解决循环变量浪费空间的问题
for(int i=0;i<100;i++)
{

}

新类型 bool:提高可读性

bool flag = false;
while(flag == true)
{

}

条件表达式:可以将返回值作为左值:优化

int a = 5;
int b = 6;

int max = a > b ? a : b;

(a > b ? a : b) = 10;
cout << "b = " << b <<endl;
return 0;
  • 关键字的升级
    关键字:static const register extern typedef inline register
  • register
    功能:将修饰变量尽可能保存到CPU内部寄存中,从而省去从内部抓取数据的时间,从而提高运行效率
    注意事项
    1、只能修饰局部变量,不能修饰函数和全局变量
    2、register修饰的变量不能再用&获取该变量的地址
    3、register修饰的变量一定是CPU所接受的数据类型
    使用场景:频繁访问的变量
    C++升级:如果使用&获取一个register修饰变量的地址,那么就将该变量保存到内存中
  • const
    功能:修饰变量,该变量为只读变量[不能通过变量名改变]
    注意事项:const指针 对 const指针
    使用场景:修饰函数形参,保证函数实参在函数执行过程中不被修改
    C++升级:const关键词修饰的变量就是常量
  • typedef
    功能:给数据类型重命名(重命名:提高代码可读性、移植性,提高编程效率)
    C++升级:启用信的关键字 using
    注意事项:重命名函数指针(函数名:指针常量,保存函数入口地址)
  • auto
    功能:自动变量[在函数结束之后解放空间]
    C++升级:做类型推导,高效编程
auto p=5;
auto p1='a';
auto p2="hello world";

auto p_func = add;

return 0;
  • 类型升级

  • 传值 VS 传地址
    传实参变量名,只能使用实参的值,不能修改
    传实参变量地址,既能使用也能修改
    当需要修改实参变量的值,传实参变量的值
    当只使用实参变量的值,传实参变量

  • 引用
    作用:给变量起别名,操作别名相当于操作这个变量
    注意事项:定义必须初始化
    使用场景:函数形参,返回值
    左值引用:能够赋值(修改),能取地址[只能绑定左值]
    右值引用:不能赋值(修改),不能取地址[只能绑定右值]
    右值引用[对象移动]

  • 引用 VS 指针
    1、指针是变量,引用时别名,引用解决函数传参传地址选择问题
    2、引用指针都占内存(引用编译阶段确立,并非隐藏)
    3、指针又多级指针,引用有左值引用和右值引用
    4、指针不安全,容易造成内存泄漏,引用不会

  • 动态内存分配(new delate)
    动态管理内存方式(C++升级):malloc free
    区别:
    1、malloc/free是函数 new/delate是运算符
    2、malloc/free按照字节为单位分配 new/delate按照类型为单位
    3、malloc/free不能初始化分配空间 new/delate可初始化

Type *p=new Type[常量];
delete[]p;
用new[]分配的内存需要用delete[]释放。
注意:申请数组空间不能对这一段空间进行初始化。

[扩展1]如何给多维数组分配空间
二维数组的动态创建,例如申请存放二维数组 int a[5][6]的内存空间。

int**a=new int8[5]
for(int i=0;i<5;++i)
{
a[i]=new int[6];
}

使用delete进行内存释放,只要将顺序反过来就行了

for(int i-0;i<5;i++)
{
delete[]a[i];
}
delete[]a;

[扩展2]如何创建三维数组

int***a=new int**[5];
//空间申请
for(int i=0;i<5;++i)
{
a[i]=new int8[6];
for(intj=0;j<6;++j)
    {
    a[i][j]=new int[7];
    }
}
//空间释放
for(int i=0;i<5;++i)
{
for(int j=0;j<6;++j)
    {
    delete[]a[i][j];
    }
    delete[]a[i];
}
delete[]a;
  • inline
    inline:内嵌
    作用:以内存空间换运行时间
    时间(编译)换空间(内存)
    空间(内存)换时间(运行)
    宏函数:省去函数传参、返回、释放等一系列操作
    自定义函数:形参需要分配空间

inline:内嵌的作用,以内存空间,提高内存效率。(只修饰函数)

内联函数在最终生成的代码中是没有定义的,c++编译器直接将函数体插入在函数调用的地方,内联函数没有普通函数调用时的额外开销(如压栈、跳转、返回)
c++中内联编译的限制:

  1. 不能存在任何形式的循环语句;
  2. 不能存在过多的条件判断语句;
  3. 函数体不能过于庞大;
  4. 不能对函数进行取址操作;
  5. 函数内联声明必须在调用语句之前;

引用:给变量起别名
注意:定义必须初始化。

int &r_a=a;int &r_a;
&r_a=a;             ×    

应用:函数形参,返回值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值