重载与缺省参数(Thinking C++)
重载与缺省参数
C++全局函数与类成员函数在编译器编译时以类名+函数名确定内部函数名
C++函数重载编译器一般以参数产生内部函数名
C++不能以返回值作为重载的原因:很多情况下函数调用者调用函数并不需要返回值,如果存在一个void f(); int f(); 当调用f();时编译器不能确定究竟是调用哪个函数。
C++安全连接
//:def.cpp
void f(int){} //f(int)定义
//:use.cpp
void f(char); //f(char)声明
int main()
{
f(1);
return 0;
}
以上代码在C中可以编译成功,但在C++中不行,由于use.cpp声明了f(char), 调用f(1)时连接器会去找例如_f_char这样 的内部函数,但只发现了
_f_int函数,导致连接出错,这就是C++的安全连接
缺省参数
缺省参数可以实现类似于函数重载的功能,而且维护简单
如有两个重载函数
void f(int i,char c){}
void f(int i){c = 'c' ;.....}
可以使用缺省参数
void f(int i,char c='c');
替代以上重载,实现相同功能
函数缺省参数一定要在函数声明时加上缺失值,函数定义时不需要在函数参数列表加上缺省值
函数缺省参数一定是后部参数,就是不能一个是缺省参数后面的某些参数不是缺省参数,即一个缺省参数后面的所有参数都是缺省参数,
缺省参数在编译器实现并不会增加内部函数,而是在编译时编译器为函数添加默认的参数值