默认参数

1.书写格式

void func(int a = 10) {
	cout << "a is " << a << endl;
}

2.默认参数只能是右到左,以下写法是错误的

因为,func(30)调用,那30属于第一个参数?第二个参数?

void func(int a = 10int b) {

	cout << "a is " << a << endl;
	cout << "b is " << b << endl;
}

3.如果函数同时有声明和实现,默认参数只能放在函数声明中

void func(int a, int b = 11);
void func(int a, int b ) {

	cout << "a is " << a << endl;
	cout << "b is " << b << endl;
}

4.默认参数可以是全局变量

int age = 20;
void display(int a = age) {
	cout << "a is " << a << endl;
}

4.1默认参数可以是函数的指针

void test() {
	cout << "test()" << endl;
}

// 注意:test函数必须要再前面
void show(int a, void(*func)() = test) {
	cout << "a is" << a << endl;
	cout << "func is" << func << endl;
	func();
}

调用

int main() {
	show(5, test);
    
    getchar();
    return 0;
} 

5.函数重载和默认参数可能产生冲突,二义性(建议优先使用默认参数)

// 编译时候不报错,函数调用时候会报错
void display() {
	cout << "display()" << endl;
}

void display(int a = 10, int b = 20) {
	cout << "a is " << a << endl;
	cout << "b is " << b << endl;
}