C++ Primer Plus —— chapter 8 函数探幽 1

C++ Primer Plus —— chapter 8 函数探幽 1

2025.5.10 武汉上大学最后时间,大学四年一无所获,往事恍惚

料是青山略输我峥嵘,亦是狂风稍逊我轻狂

目录内联函数问题和思考

内联函数

内联函数 是一个特性,为节省 函数调用 开销所做出的改进。

声明 一个函数为 内联函数 需要:

在 函数声明 前加入关键字 inline;

在 函数定义 前加入关键字 inline;

所起到的作用是:省略 原型 ,将整个(函数头和所有函数代码)放在本应提供 原型 的地方。

接下来我们来阐述一下 内联函数 和普通函数在运行时的实现过程,以及使用 内联函数 要注意的地方:

常规函数调用

执行到 函数调用 命令时,程序将在 函数调用 后立即存储该指令的内存地址,并将函数复制到堆栈(为此保留的内存块),跳到标记函数起点的内存单元,执行函数代码(也许还需将返回值放入寄存器中),然后跳回到地址被保存的指令处。

这一段是书上的原话,描述过程很精彩,可以很好理解 函数调用 的逻辑,其中整个流程和堆栈的变化要掌握清楚。

内联函数

编译器将使用相应的函数代码替换函数调用。

那么在什么情况下会使用这俩种函数处理机制呢?

如果执行函数代码的时间比处理函数调用机制的时间长,则节省的时间只占用整个过程的一小部分,这时就是常规函数调用。如果代码执行时间很短,则 内联调用 就可以节省非内联调用使用的大部分时间。另一方面,由于这个过程相当快,因此尽管节省了该过程的大部分时间,但节省的时间意义不大,除非该函数经常被调用。

另外要注意到,当编译器认为函数过大或者函数调用了自己(内联函数不能递归),即使程序员请求将函数作为 内联函数 ,编译器也不会满足,编译器一般不内联包含循环、递归、switch 等复杂操作的内联函数。

问题和思考

1.什么叫原型,它与函数声明有声明区别?

2.内联函数可以递归实现吗?

3.虚函数可以用内联函数实现吗?

未完待续,青春不散

相关推荐

Ps4 比 PC 更好 ▷➡️
bat365软件下载

Ps4 比 PC 更好 ▷➡️

📅 09-28 👁️ 4198
聚划算秒杀在哪里?怎么抢购?
趣看365app下载

聚划算秒杀在哪里?怎么抢购?

📅 08-28 👁️ 7774
“密码”的英文是什么?一文分清PIN、password和code
bat365软件下载

“密码”的英文是什么?一文分清PIN、password和code

📅 10-11 👁️ 3125