函数
1.普通函数
定义
int add(int x, int y);
int a = 2;
add(a)
- int x形参不占用内存
- 实参 a 给形参初始化后,形参才分配内存
- 形实结合有值调用和引用
- 值调用就是传递数值
- 引用传递地址
实际应用举例
引用
void swap(int &x)
{
x = 4;
}
int a = 5;
swap(a);
swap(1);//错误引用必须传地址,void swap(int x)则对
注意事项
引用相当于给变量取一个别名
int i, j;
int &a = i;
j = 10;
a = j;//相当于 i=j
cout << i << endl;
- 声明一个引用时必须同时对他进行初始化,使他指向一个已存在的对象
- 引用被初始化后不能改为指向其他对象了
2.内联函数
定义
函数前面加 inline 修饰
- 无inline的函数简单,调用频繁自动转换成inline函数
- 有inline的函数,过于繁琐自动转换成普通函数
实际应用举例
普通函数
- 函数调用会降低程序的执行效率
- 过程
- 保存现场和返回地址 跳到
- 子函数执行 完成
- 取出现场和返回地址
- 时间和空间的开销
内联函数
不是在调用时候发生控制转移,在编译时将函数体嵌入每一个调用处
注意事项
使用内联函数注意
- 一般不能有循环语句或switch
- 不能进行异常接口的声明
3.带默认形参值函数
声明
int add(int x = 5);
实际应用举例
int add(int x = 5);
void main()
{
add();
add(7);
}
int add(int x)
{
return x + 1;
}
注意事项
可多次声明在不同的作用域内
int add(int x = 5);
void main()
{
int add(int x = 7);
add()//x 默认是 7
}
//其他函数调用 add() x 默认是6
4.函数重载
定义
- 函数名相同
- 形参个数或类型不同
- 与返回值无关
- 调用时编译器进行形参和实参的最佳匹配
int add(int x);
float add(float x);
实际应用举例
2dx的 create 方法
注意事项
二义性
void fun(int x, int y=10);
void fun(int x);
func(10)//产生二义性,那个都已调用