参数的默认
什么叫参数的默认?
int fun(int a,int b,int c);`
当吧上面函数换一种方式书写
int fun(int a,int b,int c=10);
此时同样是正确的
在函数定义的时候同时赋予默认值
int fun(int a,int b,int c=10)
{
return a + b + c;
}
n = fun(10,12);`
此时只赋予了两个值,不过系统会自动给第三个参数赋予之前定义的10
n = 10 + 12 + 10 = 32
函数的默认值只能赋值一次
!错误示范
int fun(int a,int b,int c=10)
{
return a + b + c;
}
int fun(int a,int b,int c=10);
其中参数c的默认值定义了一遍,声明了一遍
由于函数的默认值是在编译时获取指令
因此函数的默认值只能赋值一次
不然系统无法判定选择用哪一个,不论赋的值一不一样。
默认值只能是常量
!错误示范
int m;
int fun(int a,int b,int c = m);`
其中m为变量
由于编译时系统会给参数传值
用变量就无法传递值,因此会出现编译错误
函数内敛
正常的函数调用
- 传递参数
- call 函数下一条指令
- 开辟函数栈帧
- 返回函数值
- 栈帧的回馈
- 消灭参数
内联函数(inline):不传参,不call下一条指令 因此在编译过程中省去步骤,减少时间空间使用
inline int fun(int a,int b,int c);
内敛符号inline只有建议的作用,如果给系统带来过大负担,可能会不使用内联函数
由于内联函数实在编译时将函数代码段替换到主函数中,因此不可以使用递归函数做内联函数 注:在递归函数中需要用到变量,而变量无法在编译时确定
符号
在编程中只有数据,和指令 所有数据都会产生符号 指令中只有函数名会产生符号
- 全局符号 global 作用域是全部文件
- 局部符号 local 作用域只有本文件
注:inline内联函数产生的是局部符号
函数的重载
什么是函数的重载 在c语言中
int fun(int a,int b);
int fun_b(short a,short b);
int fun_c(double a,double b);
如果使用这三个函数需要分别命名不同的名字
**因为c语言产生符号依赖于函数名**
在c++中
int fun(int a,int b);
int fun(short a,short b);
int fun(double a,double b);
三个函数可以使用同一个函数名
**因为c++产生符号依赖于函数名和参数类型**
也就是说c语言的函数一个名字产生一个标志符,被系统查询到 c++中函数和参数类型共同作用产生一个标志符,被系统查询到 这就是函数的重载
在函数的不同类型运算时遵循一下变换规则
例如:short和int类型计算时,会先把short转换为int类型,再进行运算
同理:函数的重载
|