功能和论点

时间:2013-09-11 12:14:20

标签: c++

如果我有

等功能
int mathscalc (int a, int b = 5)
{

}

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

6 个答案:

答案 0 :(得分:5)

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

例如:

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

mathscalc(3) // b is 5 inside the function call

答案 1 :(得分:1)

这在C ++ 11标准中有很好的解释。

§8.3.6默认参数[dcl.fct.default]

  

1如果在参数声明中指定了initializer子句,则此initializer子句将用作默认参数。默认参数将用于缺少尾随参数的调用中。

2 [例如:声明

void point(int = 3, int = 4);

声明一个可以使用类型为int的零个,一个或两个参数调用的函数。它可以通过以下任何方式调用:

point(1,2); point(1); point();

最后两次调用分别相当于point(1,4) and point(3,4)。 - 例子]

3默认参数只能在函数声明的 parameter-declaration-clause 或模板参数(14.1)中指定;在后一种情况下, initializer-clause 应为赋值表达式。不应为参数包指定默认参数。如果在参数声明条款中指定,则不应出现在ap * 参数的声明符 abstract-declarator 中 - 声明 *

答案 2 :(得分:0)

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

答案 3 :(得分:0)

5 {/ strong>的值已经分配给 b 函数中的变量mathscalc

因此,如果您将值 2 传递给a,请说 mathscalc 的乘法运算为c = a*b; c 10

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

答案 4 :(得分:0)

如果你打电话给mathscalc函数,一个人说,

   mathscalc(4);

编译器实习生用

更改此功能
   mathscalc(4, 5);

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

   mathscalc(4, 10);

编译器不会用5替换b,而是用b代替b。

答案 5 :(得分:0)

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

int mathscalc(int a = 5,int b)

是不可能的。

如果相应的函数调用是,

mathscalc(5,6); 'b'将取值6,

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