函数的默认值:
1.自右向左依次赋值
2.不能重复赋值
3.一般给在声明上
例如; int Sum(int a,int b, int c = 10);
C和C++的符号生成:
c语言中,符号生成只与 函数名 有关
c++中,符号和函数原型有关(函数返回值+函数名+参数列表)
函数重载:
函数重载是同名函数的关系,其生成的符号不同,重载的三要素:
1.同名
2.形参的类型,个数,顺序不同
3.同作用域
内联函数:
inline函数在函数的调用点直接展开,因此无开栈清栈的过程, 其是以空间换时间,可能带来的问题是会使得目标文件膨胀;
inline和static函数的区别:
是inline函数和普通函数的区别,即无栈的开辟
inline和宏的区别:
inline是在编译过程中完成的,会有类型检查和安全检查的行为在, 而宏是在预编译阶段完成的,因此inline更安全
注意:
1.内联函数一般写在头文件下
2.内联函数文本替换只在release版本中有效
3.inline是给编译器的一个建议,不一定展开,一般内联函数中有循环/递归/swicth不会展开在代码中,将其当作普通函数 处理
4.内敛函数是基于实现的,inline关键字 放在函数实现点才有效
关于c/c++中的关键字, c89:32个关键字 c98:引入了4个新的关键字,其中就有inline,并且加入了函数默认值的特性
c++99标准
const在c和c++中的区别:
c语言中: const是修饰 常变量 的,仅仅只是看常变量有没有做左值,其他的和普通变量一样
c++中: const修饰的是 常量 ,是不允许修改的,有以下三个点:
1.常量必须初始化,因为不允许修改,为了让其有效,必须初始化
2.编译器会 防止常量被修改的风险 的操作
3.在编译阶段把用到常量的地方直接替换成 常量的初始值,对于此点有以下代码:
const int a = 10;
int *p = (int *)&a;
*p = 20;
cout<< a <<endl;
此代码的输出结果为 10,虽然我们通过解引用将a所在的内存值膝盖为了 20,但是由于在编译阶段,cout中的值已经被进行了文本替换,所以输出结果为10;
基本数据类型的隐式转换规则: