如果我有一个功能,例如
int mathscalc (int a, int b = 5)
{
}
我调用函数 mathscalc(a),当它需要 2 个参数时,我怎么能只做 1 个参数?如果可能的话。
如果我有一个功能,例如
int mathscalc (int a, int b = 5)
{
}
我调用函数 mathscalc(a),当它需要 2 个参数时,我怎么能只做 1 个参数?如果可能的话。
b
有一个默认值。如果不指定,则为5,如果指定,则为给定的值。
例如:
mathscalc(3, 10) // b is 10 inside the function call
mathscalc(3) // b is 5 inside the function call
这在 C++11 标准中有很好的解释。
§8.3.6 默认参数 [dcl.fct.default]
1 如果在参数声明中指定了初始化子句,则该初始化子句用作默认参数。默认参数将在缺少尾随参数的调用中使用。
2 [ 示例:声明
void point(int = 3, int = 4);
声明一个可以用零个、一个或两个 int 类型的参数调用的函数。可以通过以下任何方式调用它:
point(1,2); point(1); point();
最后两个调用分别相当于point(1,4) and point(3,4)
。—结束示例]
3 默认参数只能在函数声明的参数声明子句或模板参数(14.1)中指定;在后一种情况下,初始化子句应为赋值表达式。不应为参数包指定默认参数。如果在parameter-declarationclause中指定,则不应出现在ap* arameter-declaration * 的声明符或抽象声明符中。
如果您mathscalc
只使用一个参数调用,b
则将设置为默认值5
。
值5已分配给函数b
中的变量。mathscalc
因此,如果您将值2传递给a
,则说 对 的结果进行mathscalc
乘法运算将是10。c = a*b;
c
如果您明确地将a=2
and传递b=3
给您的mathscalc
函数,则分配给的现有值b=5
将被覆盖为b=3
,因此 的结果c
将为6。
如果你用一种说法调用 mathscalc 函数,
mathscalc(4);
编译器实习生用
mathscalc(4, 5);
但是,如果你用两个参数打电话说,
mathscalc(4, 10);
编译器不会将 b 替换为 5,而是使用 10 代替 b。
是的,这些函数调用是可能的,并且被称为默认参数。默认参数应在最后使用,即相反,
int mathscalc (int a = 5, int b)
不可能。
如果相应的函数调用为,
数学计算(5,6);'b' 将取值为 6,
否则,如果它被制作为 mathscalc (5);'b' 将采用默认值 5。