一、函数调用执行过程
1.fun(3.14) //实参在函数里隐式转换为整数3
2.名字有作用域,对象有生命周期→函数体是一个语块,在这个语块里有新的作用域→在这个作用域里定义的形参&其他的定义都是局部变量,只有在函数执行时才会出现
3.局部静态对象
从这条语句执行,一直到程序结束才消失,就算其所在的函数消失了也没关系(厉害呀!)
4.函数声明
有名字,没内容,在头文件中声明,在源文件中定义
5.参数传递
每次调用函数时,都会重新创建形参,并用传入的实参对其进行初始化
当形参类型为引用→形参就是实参了;否则,就是把实参的值赋给形参
使用引用时,尽量使用常引用:引用的使用使形参和实参绑定到了一起,实参就很容易被改变,这不好
二、内联函数
三、带默认形参的函数
若调用给出实参,则形参采用实参值,否则调用默认参数值
声明时:不能一半赋值,一半没有
定义时:声明中有了int a=1,定义时直接使用,不用再定义了;必须从右到左依次定义,最左边可以有不定义的,但使用时就不能直接fun();了
使用时:中间不能空几个再继续赋值;
四、函数重载
1.重载:同一个东西对应不同的操作方式
2.实现机理:虽然名字是一样的,但后面参数的个数&类型是不一样的,编译器根据那个区分(比C高级~~)
3.注意
五、函数模板
化简化简再化简( ̄︶ ̄*))
1. 如果同时定义重载函数,将优先使用重载函数 ,若不能找到精确匹配,再使用函数模板