>1.内联函数必须和函数体写在一起,否则编译器直接忽略内联请求
inline int getMax(int a,int b);//Error
inline int getMax(int a,int b){
return a> b ? a : b;
}
>2.内联函数没有普通函数调用时的额外开销(出栈,跳转,返回...)
>3.内联函数是一种特殊的函数,具有普通函数的特征(参数检查,返回类型等...)
>4.内联函数是对编译器的一种请求,因此编译器可能会拒绝内联请求.
>5.内联函数由编译器处理,直接将编译后的函数体插入到函数调用的地方,宏定义则是由预处理器处理,只是简单的进行文本片段,并没有编译过程。
>6.不同的编译器可能进行编译优化,即使一些函数没有inline声明,但仍有可能会被编译器内联优化。
>7.C++中内联编译的限制:
不能存在任何形式的循环语句
不能存在过多的条件判断语句
函数体不能过于庞大
不能对函数进行取址操作
函数内联声明必须在调用语句之前
>8.编译器对于内联函数的限制并不是绝对的,内联函数相对于普通函数的优势只是省去了函数调用时压栈,跳转和返回的开销。因此,当函数体的执行开销远大于压栈,跳转和返回所用的开销时,那么内联将无意义。
* inline 和 #define 的区别
#include <iostream>usingnamespacestd;
inlineint getMax(int a,int b){
return a < b ? a : b;
}
#define GetMAX(a,b) ((a) < (b) ? (a) : (b))int main(int argc, char *argv[])
{
int a = 1;
int b = 3;
//int c = getMax(++a,b);//inline A = 2 B = 3 C = 2int c = GetMAX(++a,b);// #define A = 3 B = 3 C = 3 ==> (++a) < (b) ? (++a) : (b)cout<<"a = "<<a<<" b = "<<b<<" c = "<<c<<endl;
return0;
}
* 函数的默认参数
>若填写参数,则使用参数的值(x = 4),若不填写参数,则使用参数的默认值(x = 3)
void funA(int x = 3){...}
funA();//OK
funA(4)//OK
>默认参数必须出现在参数列表的右侧
void funA(int a,int b ,int x = 3,int y = 4);//OKvoid funB(int a = 3,int b);//Errorvoid funC(int a,int b = 4,int c);//Error
* 函数的占位参数
>占位参数只有参数类型声明,并没有变量声明
void funA(int a,int b ,int);
>一般情况下,函数体内部无法使用占位参数
>调用funA();
funA(1,2);//Error
funA(1,2,3);//OK
* inline 内联函数>1.内联函数必须和函数体写在一起,否则编译器直接忽略内联请求inline int getMax(int a,int b);//Errorinline int getMax(int a,int b){ return a> b ? a : b; }>2.内联函数没有普通函数调用时的额外开销(出栈,跳转,返回...)>3.内联函数是一种特殊的函数,具有普通函数的