内联函数,又叫内嵌函数,是一种在函数调用处内嵌一个函数体的函数,类似于C语言中的宏函数,但是又有所不同。关键词是inline
对于宏函数,是一种编译器在预处理阶段通过直接替换代码的方式,是一种简单的文本替换,省去了入栈出栈的开销。当然宏函数的缺点也很明显:具有边界效应、无法调试、无法访问类的私有成员。
而说到内联函数的特点,就需要先了解什么叫函数调用。
函数调用,有时间上和空间上的开销,程序在执行一个函数之前需要做一些工作,实参,局部变量,返回值等若干寄存器入栈,然后才能执行函数体,当执行完毕后,还要回收空间(出栈)等。
所以为了解决这个问题,我们可以使用内联函数。
内联函数是c++编译器直接将函数体插入在函数调用的地方,相对于普通函数来说,没有普通函数调用时的额外开销(压栈、跳转、返回)。而编译器不一定会准许函数的内联请求,对函数进行inline声明只是程序员对其的一个建议,非强制性的。
内联函数也具有以下限制条件:
不存在循环语句;
不存在过多的判断语句;
函数体不能太过庞大;
不能对函数进行取址操作;
内联声明必须在调用语句之前;
用法实例:
#include <iostream>
using namespace std;
#define MAX(A,B) A > B ? A :B
inline int find_max(int a,int b) //内联函数
{
return a > b ? a : b;
}
int main(int argc, const char *argv[])
{
int a = 2,b = 2;
cout<<find_max(++a,b)<<endl;
cout<<a<<" "<<b<<endl;
cout<<"***********************"<<endl;
int c = 2,d =2;
int ret = MAX(++c,d); //operator<<(cout,A > B ? A :B) //宏替换
cout<<"ret = "<<ret<<endl;
return 0;
}