C/C++内联函数
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" 转载请保留原文链接及作者。