C/C++内联函数

  1. 1 内联函数定义
  2. 2 机制
  3. 3 使用限制

1 内联函数定义

声明一个内联函数需要在定义函数时加上inline, 且定义的函数体必须能被调用者包含或看到。

C内联函数定义

inline void func()
{}

C++类成员内联函数定义

class A {
public:
  void func1() {}  // 类内部实现,默认为内联函数
  void func2();    // 类外部实现内联函数
};

inline void A::func2()
{}

2 机制

被声明为内联函数,编译器会将该函数进行内联编译,即内联函数在最终生成的代码中是没有定义的,编译器直接将函数体插入到函数调用的位置上,有点类似宏函数。所以调用内联函数会比普通函数减少压栈、跳转、返回等额外开销。

3 使用限制

其实函数加上inline关键字,是向编译器请求编译时对该函数进行内联,但编译器会不会对该函数进行内联,则需要由编译器自己分析后决定的。对于一些现代的C/C编译器也提供扩展语法,可以对函数进行强制内联,如g中的__attribute__((always_inline))属性。
以下是一般写内联函数的限制要求

  • 不能包含作任何形式的循环语句
  • 不可存在过多的条件判断语句
  • 函数体不能过大, 5行以内
  • 不能对函数进行取址操作
  • 函数内联必须在调用语句之前

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 add358@163.com

文章标题:C/C++内联函数

文章字数:373

本文作者:Jake Yang

发布时间:2017-08-09, 00:00:00

最后更新:2019-12-16, 16:02:58

原始链接:https://add358.github.io/2017/08/09/Language-CXX-2017-08-09-内联函数/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏