一、关于内联函数
内联函数和函数重载都是C++种的语法,就是被inline修饰的函数,例如 inline char *fun(int );大意可将内联函数理解为在调用内联函数的时候,在调用处直接将函数函数展开,而没有标准的函数调用,也不存在标准的函数调用的函数栈帧开辟,节约了资源,提升了效率。但是并不是说所有 inline char *fun(int );中皆是如此,被inline修饰后,它只是建议编译器做内联展开处理,至于最后是否真的展开要有编译器决定,例如说在递归函数中就无法内联,因为递归函数要在运行的时候才能知道具体的调用,此时编译器在编译时无法做编译展开内联处理。
二、函数重载
函数重载之所以能够实现是因为由于C和C++在编译时生成符号的规则不同,C由函数名决定符号,而C++由函数名加参数列表决定,重载函数必须是在相同的作用于且函数名相同的函数,注意,返回值无法作为函数重载的标志。
三、带默认值的函数
在函数声明和定义的时候我们尅给他传递默认参数,但必须是从右往左的顺序,即使必须先声明右边,在声明左边;当调用已经声明的带默认值的函数时,如果给对应参数传递了新的值则按照新的值,没有咋使用默认值;值得一提的时候,给函数一个默认值,不仅能提高对象中方法的安全性还能提高函数的效率,在编译的时候如果使用的是默认值则将一个立即数传给寄存器,提升了效率。
四、函数调用的作用域问题
在函数中无法再定义一个函数。但是可以再声明一个函数。当发生函数调用的时候,优先调用离自己最近的作用域;作用域优先级:局部>全局>整个工程;记住,重载的发生必须在同一个作用域。
五、C与C++的相互调用
C函数:void funC(int ,int ); C++函数: void funCpp(int,int);
C++中调用C:不能直接调用,把C函数的声明扩在extern “C”{、、、}中:
extern "C"
{
void funC(int ,int );
}
void funCpp(int ,int)
{
funC(10,10);
}
C中调用C++:不能直接调用,把C++源码扩在extern “c” 中;
extern C{
void funCpp(int a,intb)
{
return a+b;
}
}