inline关键字 简述

来源:互联网 发布:前瞻数据库 编辑:程序博客网 时间:2024/05/19 03:45

inline关键字


inline(内联)函数:

将普通的函数定义为inline函数,可以避免普通函数入栈出栈的开销,它是将函数内的代码直接粘贴到调用处。除此之外,它和普通函数无其他区别。

在函数声明或定义中函数返回类型前加上关键字inline,即可以把函数指定为内联函数。

内联函数的声明和内联函数的函数体的定义必须在一起。

要成为inline函数必须具备以下几点: 

  1、函数代码很短,通过不超过10行 

  2、函数内不能出现循环、递归、switch...case 

  3、需要在编译的时候开启优化选项 ,否则加上inline修饰,编译器也会视而不见


inline放置的位置只要在函数的返回值的类型前面就可,如果函数又有static修饰,放在static的前后都可。
inline在不同编译器下放置的位置导致的结果是不同的,某些编译器如果将inline放在函数的声明的前面是不被视为inline函数的,但大部分编译器对放在函数声明和函数定义的前面视为一样。


内联函数与宏的区别在于:

1、宏不是函数,而inline是函数

2、宏在定义时要小心处理宏参数,尽量用括号括起来,否则容易出现二义性。而内联函数不会出现二义性。

3、内联函数在编译时展开,而宏在预编译时展开

4、宏是由预处理器来对宏进行替代,没有语法检查、类型检查和安全检查

5、内联函数是通过编译器的控制来实现的,有语法检查、类型检查和安全检查

6、内联函数是真正的函数,而且在调用的地方,由编译器负责把内联函数的函数体代码块替换到内联函数被调用的地方,而宏只是一个简单的文本替换。

7、内联函数有参数,有返回值

8、由于内联函数可以像宏一样被展开,所以调用内联函数的时候,取消了函数参数压栈、出栈所带来的开销,从而减少了函数调用开销,这就是内联函数的优越于宏的地方


内联函数的局限性:

1、由于内联函数与宏一样也是实现为类似代码替换,所以定义为内联函数的函数体不宜过大,如果函数体过大,则某些普通的编译器就会放弃内联方式,而改用调用普通函数的方式,这样就失去了内联函数的意义了。所以,内联函数的函数体代码不宜过大,一般就是3---4行代码即可。  
2、由于内联函数是编译器在编译阶段进行函数体展开的,所以就要把类的内联函数的定义与实现都必须在声明类的那个头文件中,而不能放在实现类的那个cpp文件中。





原创粉丝点击