C++ 内联函数

内联函数从源码层看,有函数的结构,而在编译后,却不具备函数的性质。
内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处。
编译时,类似宏替换,使用函数体替换调用处的函数名。
一般在代码中用inline修饰,但是能否形成内联函数,需要看编译器对该函数定义的具体处理。


应注意如下几点: 
1、内联函数可减少cpu的系统开销,并且程序的整体速度将加快,但当内联函数很大时,会有相反的作用,

    因此一般比较小的函数才使用内联函数。


2、有两种内联函数的声明方法,一种是在函数前使用inline关见字,另一种是在类的内部定义函数的代码,

     这样的函数将自动转换为内联函数,而且没必要将inline放在函数前面。


3、内联是一种对编译器的请求,下面这些情况会阻止编译器服从这项请求:函数中包含有循环,switch或

    goto语句,递归函数,含有static的函数。

内联函数的定义:
inline 应当是用于函数声明(Declaration)而非函数实现(Implementation)。但由于不同的编译器下inline

关键字所修饰函数的调用范围不一致,因此,一种简单的作法是,将inline函数的声明和实现合一。如果确定函

数仅应用于同一文件,我们可以将函数的声明和实现都放在.c/.cpp中;否则将其放入.h中(这样,包含了此头

文件的任何文件都可以使用它)。

 

注意以下几点:

1、内联函数中不允许出现循环语句、开关语句(switch-case)和递归调用语句等

2、在类内部定义并实现的成员函数都是内联函数

3、在声明处可以省略inline,但在实现处必须加上该关键字,比如:

 

class x {
    char s[10];
    void dog();
};

inline void x::dog()
{
    ;
}

 

4、如果在类内定义的成员函数使用了 for, while, do-while, switch 等语句,该成员函数自动转换为非内联函数

5、内联函数内不能有静态数据

6、内联函数中不能有数组

 

 

若不注意以上几点,内联函数就会作为一般函数来处理,因而也就没有起到提高效率的作用,失去了使用内联函数的初衷。

posted @ 2015-04-03 08:52  阿青1987  阅读(499)  评论(0编辑  收藏  举报