PGzxc的博客

纸上得来终觉浅 绝知此事要躬行

0%

CPP学习之——内联函数(6.10)

一 概述

为什么非将成员函数的声明和定义分开,直接使用合并的成员函数不是更加简洁又方便?

一般来说当我们定义了一个函数后,编译器就会在内存中为其创建一个指令集,当我们调用这个函数时,程序就会跳转到该指令集处。当该函数运行完毕后,程序又会返回到原来执行调用该函数的下一行继续执行。假如对该函数执行了上百次调用,那么就要来回跳转上百次,很明显这是相当影响程序执行效率的。

C++对此有种解决办法,即使用关键字inline声明函数。

二 代码分析

2.1 代码

1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
using namespace std;
inline int print();
int print(){return 1;}

int main()
{
cout<<print();
return 0;

}

2.2 结果

1
1

三 原因分析

编译器将不会创建真正的函数,而只是将这个内联函数的所有代码拷贝到调用函数中,这样程序在执行调用该函数时就不需要来回跳转,自然就会提高了程序运行时的效率

四 如何选择

  • 但是任何事情都有两面性,使用内联函数在提高效率的同时,也会付出一些代码,比如说程序调用了内联函数一百次,那么就要将内联函数的代码复制一百次,无形中增大了程序的体积。
  • 当然我们也有两种折中的选择,假如函数很小的话,那么几十多次复制也不会增加多少体积,这时使用内联函数还是相当划算的。
  • 注意:在不知道具体怎么做时最好先不要使用内联函数,等程序完成大部分时再对复合要求的函数进行内联操作

五 结论

  • 在函数体短小的情况下,这种方法可以有效的提高速度,但是假如函数体很多代码并且需要重复调用该函数多次的话,那么不断地复制该函数体的代码将会造成程序的增大。
  • 所以,这个时候,我们需要将函数的声明和定义分开