如果我有
等功能int mathscalc (int a, int b = 5)
{
}
我调用函数mathscalc(a),如果需要2,我怎么只能做1个参数?如果可能的话。
答案 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=2
和b=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。