在C++中,函数的形参列表中的形参是可以有默认值的。
语法: 返回值类型 函数名 (参数= 默认值){}
示例:
//1. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值。
int func(int a, int b = 10, int c = 10) {
return a + b + c;
}
//2. 如果函数声明有默认值,函数实现的时候就不能有默认参数。
int func2(int a = 10, int b = 10);
int func2(int a, int b) {
return a + b;
}
// 3. 其实,函数的声明和实现都可以有默认参数,但不能重复,否则会有二义性。
// 如果同一个变量,声明和实现都有默认参数,编辑器不知道按声明的默认值来,还是按照实现的默认值来。
int func3(int a, int b = 10);
int func3(int a = 10, int b) {
return a + b;
}
int main() {
cout << "ret = " << func(100) << endl; // 120
cout << "ret = " << func2(20, 20) << endl; // 40
cout << "ret = " << func3() << endl; // 20
system("pause");
return 0;
}
总结:
1. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值。
2. 如果函数声明有默认值,函数实现的时候就不能有默认参数。
3. 其实,函数的声明和实现都可以有默认参数,但不能重复,否则会有二义性。如果同一个变量,声明和实现都有默认参数,编辑器不知道按声明的默认值来,还是按照实现的默认值来。 但我个人觉得:不要这样写比较好,编辑器是可以通过,不代表程序没有BUG。