目录
缺省参数/默认参数概念:
缺省参数的应用场景:
函数定义定义分离时的默认参数:
简单的编译链接:
缺省参数/默认参数概念:
缺省参数/默认参数:通俗点讲就是形参给的那个某个值
func(int a = 0);
//例如这个函数的参数,就是一个缺省参数
当时函数传参时,不管;如果没有传参,就默认为0
func(1);//参数为1
func();//参数默认为0
当时函数的参数有多个都是缺省参数时,传参时,可以已按照已有的参数个数进行对应的传参
半缺省:部分参数为缺省参数,但是是从右边往左边缺省
传参规则:从右往左连续给
缺省参数的应用场景:
例如顺序表及逆行扩容时,有时是扩容100,有时是3个,有时又不知道,就可以使用一个半缺省参数进行适当的处理
函数定义定义分离时的默认参数:
当定义声明分离时,不可以在定义和声明中同时给缺省参数
因为如果二者给的缺省参数不一致,听谁的?
所以,直接不给同时给
那么,到底在定义还是声明中给缺省参数呢?
在声明中给
为什么呢?
因为编译阶段要检查声明,检查语法各种
只有声明有了缺省参数,在调用的时候才会检查过关
但是,声明定义分离,就会导致声明阶段没有函数地址,只有一个函数的壳
因为,只有有函数定义的时候才会有函数的地址
为什么?
因为函数是一系列的执行处理
而执行处理,本质上是一系列的指令
函数名、或者说函数地址相当于这一系列指令的首地址,类似于数组名
所以,有定义才有指令,也就才会有函数地址
那么,是不是函数地址就真的没有了呢?
简单的编译链接:
一个代码的运行要经历以下几个阶段:
1、预处理:展开头文件、宏替换、条件编译、去掉注释(因为机器不需要注释,只有程序员才需要)
2、编译:检查语法、生成汇编代码
3、汇编:把汇编代码转成二进制机器码
4、链接:将该项目下所有文件合并到一起
所以,经历上述四个阶段以后,尤其是第四个阶段,链接
就会将函数声明的头文件.h和函数定义的.cpp文件组合处理到一起
那么,也就有了函数定义,即有了函数的地址