【C++】详解内联函数(inline)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jerry11112/article/details/83030366

前言

最近在学习C++的时候,内联函数让我很迷糊,上网查阅了很多的资料,发现里边解释的很抽象,最后在B站里将内联函数理解了!如果你想要搞懂内联函数,那么一定要好好看看此篇博客!

1、什么是内联函数

内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展)。

以上是官方定义,其实内联函数就是为了解决我们的程序中多次调用相同函数浪费资源的一种解决办法,它的出现让我们计算机的效率提高。具体怎么提高一会给大家展示代码!

2、内联函数的基本概念

(1)使用关键字inline说明的函数称为内联函数
(2)内联函数必须在程序中第一次调用此函数语句出现之前定义;
(3)在c++中,除具有循环语句、switch语句的函数不能说明为内联函数外,其它函数都可以说明为内联函数
(4)使用内联函数可以提高代码的执行速度,但是如果函数体语句多,则会增加程序代码的大小!

3、通过代码解释

由于编译器必须知道内联函数的函数体,才能进行替换,因此内联函数必须在程序中第一次调用此函数的语句之前定义!

#include <iostream>
#include<cmath>
using mamespace std;

//定义内联函数distance
inlline double distance(double a,double b){
	return sqrt(a*a+b*b);
}

int main(){
	double k=6,m=9;
	cout << distance(k,m)<<endl; //内联函数,它与下面的语句等价!

   cout<<sqrt(k*k+m*m)<<endl;//编译后的样子

}

上面的代码中如果没有inline(内联函数)关键字,那么我们在main函数中就要调用distance,然后在返回来sqrt(k* k+m* m);我们都知道程序在调用函数的时候浪费时间与资源!而用了内联函数我们在编译后无需调用,直接就是
cout<<sqrt(kk+mm)<<endl;提高了效率!

当我们的程序中多次调用这个函数的时候,我们的程序用一次就要调用一次,内联函数的出现让我们只需要在程序编译的时候编译一次就好了!

综上所述:
如果内联函数的方法体过长,那么编译后会让我们的代码变的非常长,因此内联函数只使用程序多次调用且函数体代码较短的情况!

4、默认情况下的内联函数

如果我们在声明类的时候,在类体中给出了成员函数的定义(不是声明),则默认为内联函数,例如当我们在类中

#include <iostream>
using mamespace std;
class Point{
    private:
    	int x,y;
    public:
    	void Setxy(int a, int b)
    	{x=a;y=b}

        void Move(int a,intb)
        {x=x+a;y=y+b}	
};

上述代码中Setxy与Move默认为内联函数!

猜你喜欢

转载自blog.csdn.net/jerry11112/article/details/83030366