C++内联函数

来源:互联网 发布:淘宝童装轮播图 编辑:程序博客网 时间:2024/06/17 02:41

一、C++内联函数

inline(小心,不是online),翻译成内联内嵌。意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置。这样做的好处是省去了调用的过程,加快程序运行速度。(函数的调用过程,由于有前面所说的参数入栈等操作,所以总要多占用一些时间)。这样做的不好处:由于每当代码调用到内联函数,就需要在调用处直接插入一段该函数的代码,所以程序的体积将增大。拿生活现象比喻,就像电视坏了,通过电话找修理工来,你会嫌慢,于是干脆在家里养了一个修理工。这样当然是快了,不过,修理工住在你家可就要占地儿了。内联函数并不是必须的,它只是为了提高速度而进行的一种修饰。要修饰一个函数为内联型,使用如下格式: 

inline 函数的声明或定义 

简单一句话,在函数声明或定义前加一个 inline修饰符。 

inline int max(int a, int b) 

   return (a>b)? a : b; 
}

内联函数的本质是,节省时间但是消耗空间。


二、使用规则

1、C语言中实现内联方式能过宏定义: #define CIRCLE(R) (3.14*(R)*(R)) 

      C语言当中 采用宏替换的方式. 编译之前采用字符串替换的方式

2、C++中实现内联:inline 内联函数替换发生在编译之后替换.编译之后的二进制代码进行替换.

3、内联函数具有类型检查,使用更安全.

4、定义内联函数有两种试:隐式声明,显示声明

       隐式声明:函数放到类声明去实现(类中声明与实现)

       显示声明:在普通函数前加关键字inline

5、内联函数是使用空间换时间,只适合简短的函数

      (说明:内联函数应该简洁,只有几个语句,如果语句较多,不适合于定义为内联函数。)

6、加了inline关键字的函数不一定会编译成内联函数.inline仅做为一种请求

     (说明:如果内联函数体中包含有循环语句、if语句或switch语句,否则,函数定义时即使有inline关键字,编译器也会把该函数作为非内联函数处理。

7、当函数声明为内联时,使用要在声明之后,实现之前,否则即使使用也是没用的。

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

8、在你调用一个内联函数之前,这个函数一定要在之前有声明或已定义为inline,如果在前面声明为普通函数,而在调用代码后面才定义为一个inline函数,程序可以通过编译,但该函数没有实现inline

比如下面代码片段: 

//函数一开始没有被声明为inline: 

void foo(); 

//然后就有代码调用它: 

foo(); 

//在调用后才有定义函数为inline: 

inline void foo() 

   ...... 

代码是的foo()函数最终没有实现inline;

0 0
原创粉丝点击