函数和参数
Functions and arguments
如果我有一个函数,例如
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=2
和 b=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。
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类