【C++升级之路】第一篇:入门基础知识(下)

本文深入探讨了C++中的内联函数,包括其概念、特性以及可能导致的空间与时间权衡。接着介绍了C++11的auto关键字,如何简化类型声明并避免错误,以及其限制。此外,还详细讲解了基于范围的for循环的使用和条件。最后,提到了指针空值nullptr的改进,以增强代码的健壮性。
摘要由CSDN通过智能技术生成


此篇文章中,船长计划用理论和代码相结合的方式向大家介绍C++的入门知识;

书接上回:【C++升级之路】第一篇:入门基础知识(上)

                  【C++升级之路】第一篇:入门基础知识(中)

全文干货,C++系列文章,兄弟们继续冲!

目录

7.内联函数 

7.1内联函数的概念

7.2内联函数的特性

1、空间换时间

2、仅为建议

3、声明定义不可分离

知识加餐(面试题)

8.auto关键字(C++11)

8.1类型别名思考

8.2auto简介

8.3auto使用细则

1.auto与指针和引用结合起来使用

2.在同一行定义多个变量

8.3auto不能推导的场景

1.auto不能做函数的参数

2.auto不能直接用来声明数组

9. 基于范围的for循环(C++11)

9.1范围for循环的用法

9.2范围for的使用条件 

1.for循环迭代的范围必须是确定的

2. 迭代的对象要实现++和==的操作。

10.指针空值nullptr(C++11)

10.1C++98中的指针空值

总结


7.内联函数 

7.1内联函数的概念

inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调
用建立栈帧的开销,内联函数提升程序运行的效率。

上面书写的代码使用了函数的调用,如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。

通过对比汇编代码,我们可以很清晰的发现两段代码实现方式的不同。

7.2内联函数的特性

1、空间换时间

inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会

用函数体替换函数调用。

  • 缺陷:可能会使目标文件变大;
  • 优势:少了调用开销,提高程序运行效率。

2、仅为建议

 inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建
议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、
是递归、且频繁调用的函数
采用inline修饰,否则编译器会忽略inline特性。

  • 简单来说,内联机制多用于优化规模较小、流程简单且频繁调用的函数,在很多情况下编译器不一定会支持这个请求(假如你有一个75行代码的函数,使用内联是很难成功的~)

正如《C++prime》第五版关于inline的内容所描述的那样:

这时我们很多朋友就会问了:为什么代码长了就不展开了呢?

其实原因就在于 —— 代码膨胀

我们都知道,一个企业级项目的代码量是非常庞大的,假设我们有一个30行代码的函数,在项目中有10000个地方需要使用,两种不同的方法会有什么区别呢?

  • 如果使用inline内联的话,函数展开后我们的项目会多出令人惊叹的30万行代码之多,而且代码重复率很高。
  • 但是如果我们使用函数调用的话,我们只需要将这30行代码调用10000次就够了,虽然耗费的时间多了,但是所需空间却可以有明显的减少(现代计算机的运行速度是非常快的,权衡利弊之后,人们更愿意用时间来换取空间使用量的减小)。

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值