内联函数、auto关键字——初识C++(终)

6. 内联函数

6.1 C语言回顾:宏

回顾:宏是一种替换,将参数替换到文本中。

由于宏是一种替换,我们写宏时需要加适当的括号控制优先级
例如我们将下列函数改成宏:

int add(int a,int b)
{
	return a+b;
}

宏为

#define ADD(a,b) ((a)+(b))

我们发现宏的书写与代码理解还是有一定难度,但宏的替换特性(不像函数那样建立栈帧)在C++中也有其用武之地,如此便有了今天的主题:内联函数。

6.2 内联函数的概念与使用

内联函数:C++编译时会在调用内联函数的地方展开没有函数调用建立栈帧的开销,内联函数能提升程序运行的效率(本质上与C中的宏一个功能)

关键字:inline

例如:
在这里插入图片描述
当然我们如何证明这样定义内联函数就不会开辟栈帧呢?
在release版本下我们能直接观察到并不会调用函数(没有call Add),在这里插入图片描述
在debug版本我们需要进行相应的配置,配置完成后我们发现确实没有调用函数

在这里插入图片描述

6.3 内联函数的特性

1.内联函数其实是一种用空间换取时间的做法,当目标函数比较大时,使用内联函数容易造成代码膨胀
2.inline对于编译器仅仅是一个建议,不同编译器对内联函数的实现机制也不同。
3.内联函数一般不建议声明与分离,因为内联函数不建立栈帧链接是找不到地址!!!!
扩展:避免出现链接冲突的方案——
1.声明和定义分离
2.使用static(外部链接属性变为内部链接属性,只能在当前文件可见);
3.使用内联函数(在文件件内部展开,仅在文件内部起作用)——针对小函数
C++习惯用内联函数替代宏。

7. auto关键字

7.1 auto 的语法

字如其名,auto关键字就是自动推导的意思,这里自动推导的为数据类型
例如:在这里插入图片描述
同时auto也能推导指针
在这里插入图片描述
注意:auto类型不能做参数;但最新标准允许auto类型做返回值。

7.2 auto 的运用场景

1.定义复杂类型是可以减少代码,如初始化函数指针;
在这里插入图片描述
2.范围for语法
我们之前遍历数组需要计算数组长度,有了auto我们就有了一种新的遍历数组的方式。在这里插入图片的描述
至于这种遍历方式的机制我们以后学习深入会更加了解,目前我们学会这样的语法已足够使用。但要注意数组大小要是确定的。

8. nullptr

C++开发工程师们在定义NULL时产生了一些bug,于是新标准新增了一个关键字nullptr作为空指针,以后C++内使用空指针建议都用nullptr

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值