C++
中允许函数的参数列表指定默认值,而且这个
默认值必须 从右向左依次指定,不能间断
,一般在函数的声明中去指定,在函数的定义中指定编译可能不会报错,但多数情况下是毫无意义的操作。
多个形参指定默认值的规则:
从右向左依次指定中间不能间断,如果函数声明和定义分开写, 一般在函数的声明处指定默认值,
如果有多个声明,按离函数最近的作用域声明指定默认值,如果一个作用域俩声明报重定义默认参数错误。
#include<iostream>
#include<string>
using namespace std;
void fun(int a = 1);
void fun2(int a = 1, int b = 2);
void fun3(int a, int b = 1);
void fun4(int a = 1);
int main() {
fun(10); //fun 10
fun(); //fun 1 不传实参 形参取默认值
fun2(); //fun2 1 2
fun2(2); //fun2 2 2
fun3(3); //fun3 3 1
fun4(); //fun4 1
//重新声明fun4
void fun4(int a = 9);
fun4(); // fun4 9 按最近的声明指定默认值
return 0;
}
void fun(int a) {
cout << __FUNCTION__ << " " << a << endl;
}
void fun2(int a, int b) {
cout << __FUNCTION__ << " " << a << " " << b << endl;
}
void fun3(int a, int b) {
cout << __FUNCTION__ << " " << a << " " << b << endl;
}
void fun4(int a) {
cout << __FUNCTION__ << " " << a << endl;
}
在函数的定义中指定编译可能不会报错,但多数情况下是毫无意义的操作,如果在声明和定义中都给了默认值就会报重定义默认参数错误。
#include<iostream>
using namespace std;
void fun4(int a = 1);
int main(){
fun4();
}
void fun4(int a=1) {
cout << __FUNCTION__ << " " << a << endl;
}