1、C++中推荐使用内联函数替换宏定义的代码片段。
内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求。使用内联函数免去了压栈,跳转,返回操作,并且比宏定义的代码片段更安全,因为它有参数检查和返回类型的检查,也没有宏的副作用。但是,C++编译器不一定准许内联函数的请求,内联函数的实现机制是使用符号表。
内联函数的限制:
1.不能存在任何形式的循环语句;
2.不能存在过多的条件判断语句;
3.函数体不能过于庞大;
4.不能对函数进行取址操作;
5.内联函数声明必须在调用语句之前。
2、函数的默认参数
在C++中可以在函数声明时为参数提供一个默认值。在一个文件中,只能为一个形参指定默认形参一次。只有参数列表后面部分的参数才可以提供默认参数值。
3、在C++中可以为函数提供占位参数
只有参数类型声明,没有参数名,在函数内部无法使用
如 int func(int a, int b, int ){ ...... }
意义:为以后程序的扩展留下线索,兼容C远中可能粗线的不规范写法,如:int func(int a, int b, int = 0){ .. }
4、重载-----函数重载
函数重载是指函数名相同,函数的参数的个数、参数的顺序、参数的类型至少有一个不同,但是和函数的返回值没有一点关系。
当函数默认参数遇上函数重载时,可能会存在二义性,因此二者不要同时使用。
如:int func(int a, int b, int c = 0) {.....} 和int func(int a, int b){......} 当调用函数func(1,2)时会产生二义性。
当函数重载遇上函数指针时,要根据重载规则挑选与函数指针的参数列表一致的候选者,并且严格匹配候选者的参数类型与函数指针类型一致。
typedef int(*PFUNC) (int a);
PFUNC p = func;
p(1); //调用的是 int func(int a);
5、C++和C的相互调用
用extern关键字强制让C++编译器对代码进行C方式编译。
extern "C" #ifdef __cplusplus
{ extern "C"
//代码段 {
} #endif
//代码段
#ifdef __cplusplus
}
#endif
C语言中不能存在重载函数,所以当让C++代码以C语言方式编译时,不能包含重载函数。