C++默认参数
默认参数就是给函数的形参一个缺省值,在调用的时候,可以根据实际情况省略实参。
注意
-
C++有默认参数,C是没有的。
-
如果函数同时有声明、实现,默认参数只能放在函数声明中。
-
默认参数的值可以的常量、全局符号(全局变量、函数名)。
int f(int a, int b) { return a + b; } int test(int a, int b = 10, int (*func)(int, int) = f) { return func(a, b); } -
只能从右往左给。
这样是正确的。
int test(int a, int b = 10, int c = 20) { return a + b + c; }这样是不正确的。
int test(int a, int b = 10, int c) { return a + b +c; } -
调用函数的时候,是无法像Python一样指定某个参数的值的,只能从左往右赋值。
-
默认参数和函数重载一起使用时,可能会产生二义性。解决方案就是二选一,删掉一个。
void func(int a); void func(int a, int b = 3); int main() { func(10); return 0; }
本质
int test(int a, int b = 10, int c = 20)
{
return a + b + c;
}
int main()
{
test(10); // 编译过后,在调用函数的时候,与调用test(10, 20, 30);过程一致。
test(10, 20); // 编译过后,在调用函数的时候,与调用test(10, 20, 30);过程一致。
test(10, 20, 30);
// test(10, 20, 30)调用过程如下
// push 30
// push 20
// push 10
// call 0FA1424h
// ...
return 0;
}
