函数

函数

函数声明:

extern 调用约定 返回类型 函数名 参数列表 const 异常

函数调用:

保存现场

压入参数

跳转执行

弹出参数

恢复现场

调用约定

image

函数重载(c++默认):允许有同名函数存在

内联实现:名字重整:在函数名字的而基本信息之上添加必要的信息,形成新的函数名以区分

重载的条件:const修饰,参数类型,异常等不同

ps.

  • 返回值,缺省值不作为区分标志
  • const作为类型的修饰符时不作为区分标志(int *和int *const不区分,因为const修饰变量本身是否可以改变 而非变量,int *和const int *可以区分),函数的调用都是值传递,本身就是const,而函数的局部变量能否改变与传递的类型无关

缺点:可能会引用其他的函数,但是头文件的定义一般在头文件而非.cpp文件,导致文件依赖性

参数列表

函数声明的参数列表中的变量名与定义中的不冲突,可以随便给

参数定义的参数列表:

  • 参数的压栈顺序由调用约定确定
  • 如果调用时使用了单目表达式,表达式的计算顺序不确定
  • 允许空变量名,代表压栈时有这个变量,但是函数没有访问到,用于接收错误调用时的多余变量
  • 省略了this指针

缺省值:固定某一参数的值,在调用时没有确定变量的值时可以作为该变量的默认值

  • 为了编译的方便,带有缺省值的参数时后面必须全部变量都有缺省值,所以一般放在最后面
  • 一般放在声明中,没有声明可以放在定义中
  • 如果在调用时传了该变量的值,则代替缺省值
  • 函数有重载,参数类型的转换只能转换最近的类型,不能跳着转换

比如,sort函数,第四个参数未确定时默认使用标准升序的cmp函数指针

image

返回值:类型检查+按值返回

返回过程:将return后的变量拷贝后作为无名变量放在堆区,然后清函数栈

返回值优化:return后使用无名临时变量,这样不需要在临时变量区申请空间,将return后变量拷贝到临时变量区的过程,直接将return后的无名临时变量对应的空间作为返回值

按值返回:返回的都是数值,可以看作是const常量

const int f( ) ↔ const f( )

int const * f( ) ↔ int * f( )

......

引用返回:本质上也是类型检查+按值返回

由于引用变量本身的值是一个变量,就是有具体地址的量,所以不允许不对应地址的量,因为无法通过它找到一个具体的对象

posted @ 2022-03-16 14:17  jakiejoe  阅读(27)  评论(0)    收藏  举报