函数
函数
函数声明:
extern 调用约定 返回类型 函数名 参数列表 const 异常
函数调用:
保存现场
压入参数
跳转执行
弹出参数
恢复现场
调用约定

函数重载(c++默认):允许有同名函数存在
内联实现:名字重整:在函数名字的而基本信息之上添加必要的信息,形成新的函数名以区分
重载的条件:const修饰,参数类型,异常等不同
ps.
- 返回值,缺省值不作为区分标志
- const作为类型的修饰符时不作为区分标志(int *和int *const不区分,因为const修饰变量本身是否可以改变 而非变量,int *和const int *可以区分),函数的调用都是值传递,本身就是const,而函数的局部变量能否改变与传递的类型无关
缺点:可能会引用其他的函数,但是头文件的定义一般在头文件而非.cpp文件,导致文件依赖性
参数列表
函数声明的参数列表中的变量名与定义中的不冲突,可以随便给
参数定义的参数列表:
- 参数的压栈顺序由调用约定确定
- 如果调用时使用了单目表达式,表达式的计算顺序不确定
- 允许空变量名,代表压栈时有这个变量,但是函数没有访问到,用于接收错误调用时的多余变量
- 省略了this指针
缺省值:固定某一参数的值,在调用时没有确定变量的值时可以作为该变量的默认值
- 为了编译的方便,带有缺省值的参数时后面必须全部变量都有缺省值,所以一般放在最后面
- 一般放在声明中,没有声明可以放在定义中
- 如果在调用时传了该变量的值,则代替缺省值
- 函数有重载,参数类型的转换只能转换最近的类型,不能跳着转换
比如,sort函数,第四个参数未确定时默认使用标准升序的cmp函数指针

返回值:类型检查+按值返回
返回过程:将return后的变量拷贝后作为无名变量放在堆区,然后清函数栈
返回值优化:return后使用无名临时变量,这样不需要在临时变量区申请空间,将return后变量拷贝到临时变量区的过程,直接将return后的无名临时变量对应的空间作为返回值
按值返回:返回的都是数值,可以看作是const常量
const int f( ) ↔ const f( )
int const * f( ) ↔ int * f( )
......
引用返回:本质上也是类型检查+按值返回
由于引用变量本身的值是一个变量,就是有具体地址的量,所以不允许不对应地址的量,因为无法通过它找到一个具体的对象

浙公网安备 33010602011771号