1.缺省参数
在c语言中,函数没有指定参数列表时,默认可以接受任意多个参数
但在c++中,因为严格的参数类型检测,没有参数列表的函数,默认为void,不接受任何参数
void test()
{}
int main()
{
test(10);
test(10,"hello world");
return 0;
}

在c语言中可以通过编译

c++对于函数参数检测更加严格,如果函数没有参数则不能接受任何参数
(1)缺省参数概念
缺省参数是声明或定义函数时为函数的参数指定的一个默认值,在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参
#include <iostream>
using namespace std;
void test(int a=0)
{
cout<<a<<endl;
}
int main()
{
test();//没有传参时,使用参数的默认值
test(10);//传参时,使用指定的实参
return 0;
}

(2)缺省参数分类
- 全缺省参数
void test(int a=0,int b=0,int c=0)
{
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
}
- 半缺省参数
void test(int a,int b=0,int c=0)
{
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
}
注意:
- 带缺省值的参数必须放在参数列表的最后面
- 缺省参数不能同时在函数声明和定义中出现,只能二者则其一
- 缺省值必须是常量或者全局变量
- C语言不支持
2.函数重载
(1)基本概念
函数重载是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同,常用来处理实现功能类似数据类型不同的问题
#include <iostream>
using namespace std;
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);
return 0;
}
(2)为什么c语言不能支持函数重载(测试环境:vs2008)
- 最主要的原因是c和c++编译器对于函数的重命名风格不同,比如一个函数的声明如下:
void func(int x,int y);
- 在c语言中,编译器在编译后在库中的名字为_func,在c++中,编译器在编译后在库中的名字为_func_int_int
- 还有一个函数的声明如下
void func(float x,float y);
- 在c语言中,编译器在编译后在库中的名字是_func,而在c++中,编译器编译后在库中的名字_func_float_float,在连接时,都是找名字进行连接的,就比如以上两个函数,在c语言中两个的名字一样,就会在连接中报错,c++中它们的名字不一样,因此不会报错。