一、内联函数(inline修饰)
1、inline只能出现在函数定义的位置
为了保持预处理宏的效率又增加安全性,还能像一般成员那样可以在类里访问自如,c++引入了内联函数(inline function)。
inline int myAdd(int x, int y)
{
return x+y;
}
内联函数为了继承宏函数的效率,没有函数调用时的开销,然后又可以像普通函数那样,可以进行参数返回值类型的安全检查,又可以作为成员函数,。
内联函数是在编译阶段完成的替换
2、内联函数的特点:
- 能保证参数的完整性
- 有作用域的限制,可以成为类的成员
- 类中的成员函数默认都是内联函数(不用inline)
3、宏函数和内联函数的区别
宏函数:
预处理节点完成替换,没有出入栈的开销、不能保证参数的完整性、没有作用域限制、不能作为类的成员
内联函数:
编译阶段完成替换,没有出入栈的开销、能能保证参数完整性、有作用域限制、能作为类的成员
4、内联函数和编辑器
内联函数的要求:不能有任何形式的循环语句、不能存在过多的条件判断语句、函数体不能过于庞大、不能对函数进行取地址操作。
内联函数仅仅是对编译器的一个建议
二、默认参数 (顺序很重要)
c++在声明函数原型时可以为一个或者多个参数指定默认(缺省)的参数值,当函数调用的时候如果没有传参,编译器会自动用默认值代替。
示例代码:
#include <iostream>
using namespace std;
//如果函数调用时,不给b传参,那么b值为100
int get_Add(int a, int b = 100)
{
return a + b;
}
void test13()
{
cout<<get_Add(10,20)<<endl;//传两个参数
cout<<get_Add(10)<<endl;//传一个参数,根据顺序默认赋值给a
}
int main()
{
test13();
return 0;
}
运行结果:
注意点:
1、函数的默认参数从左向右,如果一个参数设置了默认参数,那么这个参数之后的参数都必须设置默认参数。
int fun(int a, int b, int c=10)//正确
int fun(int a, int b=20, int c)//错误
2、默认参数一般在函数声明的时候设置,增强代码的适用性
三、函数的占位参数
c++声明的时候可以设置占位参数,占位参数只有参数类型声明,而没有参数名声明,重载运算符时可能会用到
1、占位参数函数内部无法使用,但必须传参
void test(int a, intb, int)
{
}
test(10,11,20);//必须传够三个参数
2、占位参数可以设置成缺省参数
操作符重载的后置++要用
void test(int a, intb, int=100)
{
}
test(10,11,20);//可以
test(10,11);//可以