c++ 内联函数(inline)

内联函数是C++为提高程序运行速度所做的一项改进。
对于内联代码,编译器使用相应的代码来代替函数调用。
程序无需调到另一个位置处执行代码,再跳回来。
因此内联函数的运行速度比常规函数稍快,但代价是需要占用更多的内存

使用方法:

  1. 在函数声明前加上关键字inline
  2. 在函数定义前加上关键字inline

inline与define

define是不能按值传递而inline可以
例:计算平方:

#define square(x) x*x
a=square(2)      ->   a=2*2
a=square(2+1)    ->  a=2+1*2+1
inline int square(int x) 
{
    return x*x;
}
a=square(2)      ->   a=2*2
a=square(2+1)    ->  a=(2+1)*(2+1)

define:定义预编译时处理的宏,只是简单的字符串替换,无类型检查。
下面借用他人博客中的一段话:

inline:1、inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义,编译阶段完成。  2、内联函数要做类型安全检查,inline是指嵌入代码,在调用函数的地方不是跳转,而是把代码直接写到那里去,对于短小的函数来说,inline函数可以得到一定效率的提升,和c时代的宏函数相比,inline函数更加安全可靠,这个是以增加空间的消耗为代价的。



ps:定义内联函数只是给编译器一个建议,但是最后的决定权还是在于编译器,如果函数的逻辑比较复杂(有循环递归之类的),此时则会内联失败。根据google编程规范,内联函数一般在10行以下,而且逻辑简单。

编译器在什么情况下才会将一个声明为inline的函数当作内联函数?
对于函数是否内联的判断,各个编译器有不同的机制。

猜你喜欢

转载自blog.csdn.net/ac__go/article/details/79806539