C++中的内联函数
发布日期:2021-07-01 04:24:32 浏览次数:3 分类:技术文章

本文共 1177 字,大约阅读时间需要 3 分钟。

文章目录

1 内联函数

1.1 内联函数的基本概念

C++ 中const常量可以替代宏常数定义,如:

const int A = 3; <–> #define A 3

C++中是否有解决方案替代宏代码片段呢?C++中推荐使用内联函数替代宏代码块,C++中使用inline关键字声明内联函数。

内联函数:

  • C++编译器可以将一个函数进行内联编译,被C++编译器内联编译的函数叫做内联函数。
  • 内联函数具有普通函数的特征(参数检查、返回类型等)。
  • C++编译器直接将函数体插入函数调用的地方,扩展到函数调用的地方,并不是简单的文本替换(宏代码片段由预处理器处理,进行简单的文本替换,没有任何编译过程,因此可能出现副作用)。
  • 内联函数没有普通函数调用时的额外开销(压栈、跳转、返回)。
  • C++编译器不一定满足函数的内联请求,函数的内联请求可能被编译器拒绝。
inline int fun(int a, int b){
return a < b ? a : b;}

注意:内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求(在VS2013编译器优化选项中选择强制内敛时,只要函数定义或者函数声明中有一处使用了inline关键字,编译器都会对函数进行内联)。

1.2 现代编译器对于内联函数的处理

现代C++编译器能够进行编译优化,一些函数即使没有inline声明,也可能被内联编译。

一些现代C++编译器提供了扩展语法,能够对函数进行强制内联,如:

  • g++:attribute((always_inline))(强制内联)
  • MSVC:__forceinline(并不是强制内联,和inline功能基本一样,只是inline是标准C++推荐使用的)

编程实验:内联函数深度示例

#include 
//__forceinline//__attribute__((always_inline))inline int add_inline(int n);int main(int argc, char *argv[]){
int r = add_inline(10); printf(" r = %d\n", r); return 0;}inline int add_inline(int n){
int ret = 0; for(int i=0; i

1.3 内联函数注意事项

C++ 中inline内联编译的限制:

  • 不能存在任何形式的循环语句;
  • 不能存在过多的条件判断语句;
  • 函数体不能过于庞大;
  • 不能对函数进行取址操作;
  • 函数内联声明必须在调用语句之前。

随着编译技术的发展,上述限制变得越来越少。

另外,内联函数的定义最好放在头文件中。


参考资料:

转载地址:https://muzimin.blog.csdn.net/article/details/104126336 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C++中函数重载分析
下一篇:C++中的访问权限

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年05月05日 16时40分20秒