一、默认值
1、C语言
C89标准无默认值
C99标准有默认值
最新的标准:C11
2、C++
C++99标准
C++11标准
从右向左依次给出默认值
参数的默认值只能给1次
例:
int Sum(int,int);
int main()
{
Sum(10,20);
Return 0;
}
编译时√
链接出错:因为函数没有定义(实现),符号解析出错
二、内联函数(inline)
inline函数:在函数调用点直接展开
(1)内联函数修饰声明时无作用
(2)在Debug版本下无作用
1、内联函数与普通函数的区别
普通函数:(1)函数调用过程
(2)函数执行过程
内联函数:无函数调用过程
2、内联函数和static修饰的函数的区别
(1)static修饰的函数有堆栈调用过程,内联函数没有函数调用过程
(2)static修饰的函数有符号生成(local),内联函数无符号生成
共同点:本文件内部有效
3、内联函数和宏定义的区别
(1)宏在预编译期间,无类型检查,无安全检查
inline在编译期间,有类型检查,有安全检查
(2)宏不能调试,内联函数inline可以调试
4、内联函数的缺点:空间换时间
代码膨胀为代价来提高效率
缺少函数调用的开销
5、什么情况用inline合适?
当函数调用开销 远大于 函数执行的开销
6、所有函数都能设成inline函数吗?
如:递归、循环 编译器不会将它们在函数调用点展开
三、函数重载
1、函数重载的条件
(1)函数名相同
(2)形参类型不同、形参个数不同、形参类型顺序不同
(3)相同作用域下
C/C++由于生成符号的方式不同,C语言只和函数名有关,所以C语言不能重载。
例:
C:int sum(int,int) ----> _sum()
C++:int sum(int,int) ----> _sum_int_int()
四、const
1、C语言:const:常变量
编译期间,看这个变量有无作左值
2、C++:const:常量
(1)必须初始化
(2)编译时:对于所有用到该常量的地方,直接进行替换
(3)const常量:可以作数组的下标
(2)拿变量初始化常量时,const退化成常变量
例如:
const int a = b ;
(5)const修饰的符号是一个local
五、引用
表层:起别名
底层:指针指向
例子:
void Swap(int &pa,int &pb)
{
int tmp = pa;
pa = pb;
pb = tmp;
}
(1)引用必须初始化
(2)引用不能再修改,再引用
(3)引用占内存
(4)编译期间处理的时候,对所有使用引用的地方,编译器默认加一个解引用
(5)引用不参与类型,要和类型结合在一起
六、参数
1、实参传形参的过程:初始化的过程
2、const不会对实参有影响
3、不能返回局部变量的指针或引用
七、const 和 返回值
寄存器带出的值不能取地址&
引用&的时候有临时变量产生