0

如果我有一个功能,例如

int mathscalc (int a, int b = 5)
{

}

我调用函数 mathscalc(a),当它需要 2 个参数时,我怎么能只做 1 个参数?如果可能的话。

4

6 回答 6

5

b有一个默认值。如果不指定,则为5,如果指定,则为给定的值。

例如:

mathscalc(3, 10) // b is 10 inside the function call

mathscalc(3) // b is 5 inside the function call
于 2013-09-11T12:15:22.773 回答
1

这在 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 * 的声明符或抽象声明符中。

于 2013-09-11T12:21:50.043 回答
0

如果您mathscalc只使用一个参数调用,b则将设置为默认值5

于 2013-09-11T12:18:01.280 回答
0

5已分配给函数b中的变量。mathscalc

因此,如果您将值2传递给a,则说 对 的结果进行mathscalc乘法运算将是10c = a*b;c

如果您明确地将a=2and传递b=3给您的mathscalc函数,则分配给的现有值b=5将被覆盖为b=3,因此 的结果c将为6

于 2013-09-11T12:18:09.723 回答
0

如果你用一种说法调用 mathscalc 函数,

   mathscalc(4);

编译器实习生用

   mathscalc(4, 5);

但是,如果你用两个参数打电话说,

   mathscalc(4, 10);

编译器不会将 b 替换为 5,而是使用 10 代替 b。

于 2013-09-11T12:24:07.947 回答
0

是的,这些函数调用是可能的,并且被称为默认参数。默认参数应在最后使用,即相反,

int mathscalc (int a = 5, int b)

不可能。

如果相应的函数调用为,

数学计算(5,6);'b' 将取值为 6,

否则,如果它被制作为 mathscalc (5);'b' 将采用默认值 5。

于 2013-09-11T12:28:05.010 回答