KLSeis

导航

 

一、简述

inline关键字放在函数返回类型前,函数实现处必须写inline关键字。关键字inline在函数声明部分可以加也可以不加,建议不加,因为用户不需要知道一个函数是否是内联函数。假如在声明处加了inline,但是在实现处没有加inline,那么此函数被当做普通函数处理。

与普通成员函数不同的是,inline成员函数的实现在头文件中,因为内联函数必须在调用该函数的每个文本文件中定义。可以使用如下书写形式:

//Student.h
class Student
{
    public: int min_fun( int a, int b );
}

inline int Student::min_fun( int a, int b )
{
    return a < b ? a : b;
}

 假如,内联函数的实现写在了源文件中并且在这个源文件以外的文本文件中调用了此内联函数,那么编译可以通过,但是链接器会报“无法解析的外部符号”的错误。

在声明时就实现的函数自动成为内联函数。一个好的编译器能自动决定函数是否应该被当做内联函数使用,不管是否添加inline关键字。

 

二、内联函数提高程序效率

普通函数的调用要经过“保存现场、转到被调函数执行、执行完毕返回调用处、恢复现场”这一过程,产生时空开销。内联函数是通过代码膨胀来执行的,在内联函数调用处复制函数代码,这样省去了普通函数调用的时空开销,提高了程序执行效率,但是由于代码复制增加了内存开销,所以内联函数应当是小函数、执行耗时短的函数。这也就说明了为什么不能把所有的函数都作为内联函数。

 

三、不要过度使用内联函数,尤其是大函数,并且内联函数中不要含有循环、判断、选择。

四、注意: 内联函数和宏定义虽然都是代码替换,但是完全不一样,不要把二者混淆;  内联成员函数可以访问成员变量(public private protected),除了比普通成员函数执行快之外,不要刻意区分内联成员函数和普通成员函数。

posted on 2014-02-20 23:04  KLSeis  阅读(7820)  评论(0编辑  收藏  举报