内联函数:inline
内联函数要解决的问题
- 为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题.
int inline g(int x)
{
return x+x;
}
int f()
{
return g();
}
实际编译的结果相当于把每次函数调用的地方替换成函数体,这样就省去了函数调用压栈出栈的时间,提高了执行效率
int f()
{
return x+x;
}
- 引入inline函数的主要原因是用它替代C中复杂易错不易维护的宏函数
inline 使用的限制
inline只适合涵数体内代码简单的涵数使用,不能包含复杂的结构控制语句例如while、switch,并且不能内联函数本身不能是直接递归函数(即,自己内部还调用自己的函数)
inline 仅仅是对编译器的一个建议
inline 函数由inline关键字来定义,但并不是加了inline关键字的函数就会被编译器认为是内联函数,inline函数仅仅是一个对编译器的建议,所以最后能否真正内联,看编译器的意思,它如果认为函数不复杂,能在调用点展开,就会真正内联,并不是说声明了内联就会内联,声明内联只是一个建议而已。
inline 是一种“用于实现的关键字”
关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。
如下风格的函数Foo 不能成为内联函数:
inline void Foo(int x, int y); // inline 仅与函数声明放在一起
void Foo(int x, int y){}
而如下风格的函数Foo 则成为内联函数:
void Foo(int x, int y);
inline void Foo(int x, int y) {} // inline 与函数定义体放在一起
inline 的优缺点
优点:
1.内联函数同宏函数一样将在被调用处进行代码展开,省去了参数压栈、栈帧开辟与回收,结果返回等,从而提高程序运行速度
2.内联函数相比宏函数来说,在代码展开时,会做安全检查或自动类型转换(同普通函数),而宏定义则不会。
缺点:
1.内联函数能够提高函数的执行效率,但是以内存膨胀为代价的,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。
参考文章:
C++中的Inline用法
C++inline函数简介
网友评论