您的位置:首页 > 编程语言 > C语言/C++

C++每日一练(inline)

2016-10-18 18:36 162 查看

一、今日课题

inline

二、实战演练

在程序编译时,编译器会将内联函数调用处用函数体替换

1.有何用?

inline通过消除调用开销来提升性能,并且允许进行调用间优化。

2.怎么用?

inline对于编译器而言,意味着“在编译阶段,将调用动作以被调用函数的本体替换之”。但是它只是一种建议,编译器可以去做,也可以不去做。从逻辑上来说,编译器将函数inline的步骤如下:

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

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

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

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

经过以上处理,可消除所有与调用相关的痕迹以及性能的损失。

3.前方高能

1)键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。

2)如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。类的构造函数和析构函数容易让人误解成使用内联更有效。要当心构造函数和析构函数可能会隐藏一些行为,如“偷偷地”执行了基类或成员对象的构造函数和析构函数。所以不要随便地将构造函数和析构函数的定义体放在类声明中。一个好的编译器将会根据函数的定义体,自动地取消不值得的内联(这进一步说明了 inline 不应该出现在函数的声明中)。

三、C++树



10/18/2016 6:35:14 PM
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: