c++函数默认值、函数重载、inline函数

c++函数形参可以给默认值。函数声明时可以给默认值

 

函数有默认值,没有实参,用默认值

函数有默认值,有实参,用实参

形参和实参:从左向右匹配,从右向左依次赋值。

函数的默认值:

 1、自右向左依次赋值  2、不能重复赋值(声明中给出默认值,定义中再不允许给出默认值) 3、一般给在声明上

 

_cdecl:c的标准调用约定

_stdcall:windows的标准调用约定

_fastcall:快速调用约定

函数声明生成函数符号

c语言:函数声明生成的函数符号只和函数名有关 。_cdel调用约定(C标准调用约定):函数名前加下划线

c++:函数符号与函数原型(返回值,形参,函数名)有关 

         _cdecl调用约定:“?”+函数名+参数表的开始标识 “@@YA” + 函数返回类型代号+参数类型代号 +结束标识“@Z”或“Z”(无参数)。

bool Compare(int a, int b)  //?Compare@@YA_NHH@Z

void Sort(double arr[], int len);//?Sort@@YAXQANH@Z 

void Sort(int arr[], int len);// ?Sort@@YAXQAHH@Z        ?+Sort函数名+@@YA(c标准调用约定)+X(void返回值)+ QAH整形指针   H整型+@Z(有参数)

函数返回值类型 void(X) bool(_N) 参数类型int(H)double(N)   long(J)

函数重载:同名函数的关系

形参能作为函数重载的依据,返回值不能作为函数重载的依据。是因为调用点看不到函数的返回值,能看到实参类型,从而找到参数类型相同的

int rt = Compare(10,20)(红色的部分为函数调用点)

函数重载三要素:1、同名 2、形参不同(类型、个数、顺序)3、同作用域

重载时参数匹配不上,试着参数类型转换。如果有二义性则报错

c++函数默认值、函数重载、inline函数_第1张图片

内存中最多能存放整形数据的个数:(unsigned int)(-1)/size of(int)         -1(ff ff ff  ff)=2^32=4G

inline 函数-----》空间换时间的思想

在函数的调用点直接展开函数,找不到定义点(不生成函数符号)

普通函数有开栈清栈操作。inline函数无开栈清栈

执行的开销小于开栈清栈(调用)开销,建议用inline

执行的开销大于调用开销,不建议使用inline函数

inline函数和static修饰的函数区别:static函数有开栈和清栈操作

inline函数和宏的区别:inline在编译期间处理,有类型检查和安全检查

                                     宏在预编译期间处理,无类型检查和安全检查

inline函数的注意事项:1、写在头文件下

                                      2、只在release版本生效

                                      3、内联只是给编译器的建议(展不展开由编译器决定)递归、循环、switch一定不会处理成内联

                                      4、加在声明点的inline无效,加在定义点才有可能实现,内联是基于实现的不是基于声明的。

c89下有32个关键字,没有inline。C98标准时引入4个,其中有inline

const a

c语言中const 修饰的a是个常变量,编译阶段看常变量有没有做左值,有则报错,其他的和普通变量相同。

c++中const修饰的变量是常量 要初始化。不予许修改常量内存,不允许普通指针指向常量内存(有修改常量内存块的风险)

编译阶段把用到常量的地方替换成常量初始化的值

 

 

                                      

 

 

你可能感兴趣的:(C/C++)