函数调用需要建立栈内存环境,进行参数传递,并产生程序执行转移,这些工作都需要时间开销,有些函数使用频率高,但代码却很短,因此c++提供了inline函数,减少函数调用的成本。
内联函数的函数体限制:内联函数中,不能含有复杂的结构体控制语句,如switch和while等。如果内联函数有这些语句,则编译将该函数视同普通函数那样将产生函数调用代码。递归函数也不能视为内联函数。
inline int max(int a, int b)
{
return a>b?a:b;
}
int main()
{
int a=55, b=4;
int c=max(a++,b); //调用内联函数
}
内联函数与宏定义区别:
①宏定义可以代替小函数定义,但有缺陷;
②宏只告诉编译器简单的替换,不检查参数类型;
③宏的作用可以用内联函数代替。
默认参数的函数:调用函数时可以不指定全部参数,为可以不指定的参数提供默认值。
例如:
int add(int x=5,int y=6,int z=3);
int main()
{
add(); //所有参数均为默认值
add(1,5); //第三个参数采用默认值
}
默认参数的顺序规定:如果一个函数中有多个默认参数,则形参分布默认参数应从右至左逐渐定义,当调用函数时,只能向左匹配参数。
例如:
void func(int a=1, int b, int c=3, int d=4); //error
void func(int a, int b=2, int c=3, int d=4); //ok
//对第二个函数调用时
func(10,15,20,25); //ok,调用给出了所有参数
func(); //error,参数a没有默认值
func(10,15); //ok,参数c,d采用默认值
func(2,10,,5); //error,只能从右到左顺序匹配参数