深入了解C++开发技术中的inline函数

开课吧小一2021-08-06 14:25

    一般来说人们在提起C++开发语言的时候,都会觉得其很陌生,并且会联想到C语言。C++开发工程师拥有良好的待遇以及发展前景,并且吸引了很多人想要转行成为C++开发工程师。为了能够顺利成为C++开发工程师,函数是必然需要了解的知识。

深入了解C++开发技术中的inline函数

    inline函数简介

    inline函数由inline关键字定义,引入inline函数的主要原因是用它替代C中复杂易错不易维护的宏函数。

    编译器对inline函数的处理办法

    编译器在编译阶段完成对inline函数的处理,即对inline函数的调用替换为函数的本体。但inline关键字对编译器只是一种建议,编译器可以这样去做,也可以不去做。从逻辑上来说,编译器对inline函数的处理步骤一般如下:

    1、将inline函数体复制到inline函数调用处;

    2、为所用inline函数中的局部变量分配内存空间;

    3、将inline函数的的输入参数和返回值映射到调用方法的局部变量空间中;

    4、如果inline函数有多个返回点,将其转变为inline函数代码块末尾的分支(使用GOTO)。

    inline函数使用的一般方法

    函数定义时,在返回类型前加上关键字inline即把函数指定为内联,函数申明时可加也可不加。但是建议函数申明的时候,也加上inline,这样能够达到"代码即注释"的作用。

    使用格式如下:

inline int functionName(int first, int secend,...) {/****/};

    inline如果只修饰函数的申明的部分,如下风格的函数foo不能成为内联函数:

inline void foo(int x, int y); //inline仅与函数声明放在一起

void foo(int x, int y){}

    而如下风格的函数foo则成为内联函数:

void foo(int x, int y);

inline void foo(int x, int y){} //inline与函数定义体放在一起

    inline函数的优点与缺点

    从上面可以知道,inline函数相对宏函数有如下优点:

    1、内联函数同宏函数一样将在被调用处进行代码展开,省去了参数压栈、栈帧开辟与回收,结果返回等,从而提高程序运行速度。

    2、内联函数相比宏函数来说,在代码展开时,会做安全检查或自动类型转换(同普通函数),而宏定义则不会。

    例如宏函数和内联函数:

//宏函数
#define MAX(a,b) ((a)>(b)?(a):(b))

//内联函数
inline int MAX(int a,int b)
{
 return a>b?a:b;
}

    使用宏函数时,其书写语法也较为苛刻,如果对宏函数出现如下错误的调用,MAX(a,"Hello"); 宏函数会错误地比较int和字符串,没有参数类型检查,但是使用内联函数的时候,会出现类型不匹配的编译错误。

    3、在类中声明同时定义的成员函数,自动转化为内联函数,因此内联函数可以访问类的成员变量,宏定义则不能。

    4、内联函数在运行时可调试,而宏定义不可以。

    万事万物都有阴阳两面,内联函数也不外乎如此,使用inline函数,也要三思慎重。inline函数的缺点总结如下:

    1、代码膨胀。

    inline函数带来的运行效率是典型的以空间换时间的做法。内联是以代码膨胀(复制)为代价,消除函数调用带来的开销。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。

    2、inline函数无法随着函数库升级而升级。

    如果f是函数库中的一个inline函数,使用它的用户会将f函数实体编译到他们的程序中。一旦函数库实现者改变f,所有用到f的程序都必须重新编译。如果f是non-inline的,用户程序只需重新连接即可。如果函数库采用的是动态连接,那这一升级的f函数可以不知不觉的被程序使用。

    3、是否内联,程序员不可控。

    inline函数只是对编译器的建议,是否对函数内联,决定权在于编译器。编译器认为调用某函数的开销相对该函数本身的开销而言微不足道或者不足以为之承担代码膨胀的后果则没必要内联该函数,若函数出现递归,有些编译器则不支持将其内联。

    以上就是开课吧广场小编为大家整理的“深入了解C++开发技术中的inline函数”一文,更多相关信息尽在开课吧广场C/C++教程频道。

相关推荐

2021大厂高频面试题精选,0元免费领

福利来袭,C++经典项目实战免费领取!

职场进阶必备,数据分析职业能力特训营

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
算法刷题核心能力提升营