一:缺省参数
1.c语言与c++在对函数参数检测时的区别
- 首先可以创建一个c工程,测试以下代码:
void func()
{
return;
}
int main()
{
func();
func(10);
func(10, 20);
func('c');
}
可以发现在c语言中,函数没有指定参数列表时,默认可以接收任意多个参数,但在c++当中呢?,工程换作c++再试试上面的代码能否通过编译
结果编译器会报错,这是因为c++对于函数参数检测更加严格,如果函数没有参数则不能接收任何参数。
2.缺省参数的概念
- 缺省参数时生命或者定义函数时为函数参数指定一个默认值,在调用该函数是,如果没有传参,则使用默认值,否则,使用指定的实参。
void func(int a = 1)
{
cout << a << endl;
return;
}
int main()
{
func();//没有传参使用默认值
func(10);//传参,则使用指定的实参
}
3.全缺省与半缺省
- 全缺省参数
void func(int a = 1, int b = 2, int c = 3)
{
cout << "a = "<< a << endl;
cout << "b = "<< b << endl;
cout << "b = "<< c << endl;
}
- 半缺省参数
void func(int a, int b = 2, int c = 3)//缺省值只能从右朝左给
{
cout << "a = "<< a << endl;
cout << "b = "<< b << endl;
cout << "b = "<< c << endl;
}
注意:
- 缺省参数不能同时在函数声明和定义中,只能二者则其一
- 缺省值必须是常量或者全局变量
二:函数重载
1.基本概念
- 函数重载势函数的一种特殊情况,c++允许在同一个作用域中声明几个功能类似的同名函数(c不支持),这些同名函数的形参列表(参数个数、类型、顺序)必须不同。
int add(int left, int right)
{
return left + right;
}
double add(double left, double right)
{
return left + right;
}
long add(long left, long right)
{
return left + right;
}
int main()
{
add(10, 20);
add(10.0, 20.0);
add(10l, 20l);
}
2.为什么c语言不能支持函数重载(测试环境:vs2013)
- 最主要的原因就是c和c++编译器对于函数的重命名风格不同,比如一个函数的声明如下:
void function(int x,int y);
- 在c语言中,编译器在编译后在库中的名字为_function ,在c++中,编译器在编译后在库中的名字为_function_int_int
- 还有一个函数的声明如下:
void function(float x,float y);
- 在c语言中,编译器在编译后在库中的名字为_function。而在c++中,编译器在编译后在库中的名字_function_float_float。在链接时,都是找名字进行链接的,就比如以上两个函数,在C语言中两个的名字一样,就会在链接中报错。C++中它们的名字不一样,所以就不会报错。