函数和参数

Functions and arguments

本文关键字:参数 函数      更新时间:2023-10-16

如果我有一个函数,例如

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) 中指定;在后一种情况下,初始值设定项子句应是赋值表达式。不得为参数包指定默认参数。如果在参数声明子句中指定,则不应在 p*arameter-statement* 的声明符或抽象声明符中出现。

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

将值 5 分配给 mathscalc 函数中的变量b

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

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

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

   mathscalc(4);

编译器实习生更改此函数

   mathscalc(4, 5);

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

   mathscalc(4, 10);

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

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

即相反的参数,

int mathscalc (int a = 5, int b)

是不可能的。

如果相应的函数调用如下,

数学斯卡克 (5,6);"b"将取值 6,

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