将其他参数作为默认值的函数参数
Function argument taking other argument as default value
我希望函数参数将其他参数的值作为默认值。
我的问题是:为什么不允许我那样做?
void foo(int a, int b = a)
{
}
还有别的办法吗?
void foo(int a)
{
foo(a,a);
}
void foo(int a, int b)
{
}
使用
void foo(int a, int b = a) { ... }
根据标准,是一个错误。
来自C++11标准:
8.3.6默认参数
9每次调用函数时都会评估默认参数。函数参数的求值顺序未指定。因此,函数的参数不应用于默认参数中,即使它们没有被评估。在默认参数之前声明的函数的参数在作用域中,并且可以隐藏命名空间和类成员名称[示例:
int a; int f(int a, int b = a); // error: parameter a // used as default argument ...
-结束示例]
- 为什么不允许我那样做
由于函数参数的求值顺序未指定,因此不能保证b
将使用作为a
的参数传入的值进行初始化。
从$8.3.6/9默认参数[dcl.fct.default]:
每次使用调用函数时,都会计算默认参数没有对应参数的参数。参数不应在默认参数中显示为可能求值的表达式
[示例:int a; int f(int a, int b = a); // error: parameter a // used as default argument
和
- 还有别的办法吗
使用函数重载非常简单。
相关文章:
- 将可变参数函数的参数封装在类实例中
- QML 使用带有参数C++函数
- 使用可变参数函数作为模板参数
- 如何在C++中伪造虚拟可变参数函数模板?
- 为什么可变参数函数不适用于模板
- C++ std::functional 中的可变参数函数模板
- 可变参数函数指针的定义对于VxWorks spyLib来说不清楚
- 使用可变参数函数覆盖具有不同函数签名的虚函数
- 考虑引用和常量的可变参数函数包装器
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 在可变参数函数中转发特定范围的参数
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 使用带有一个参数函数的递归找到数字的平方
- 可变参数函数模板不能很好地使用 std::function 作为参数
- 多个可变参数函数的单个模板参数包?
- 参数数据类型未知的可变参数函数
- 可变参数函数参数包扩展
- 使用模板可变参数函数将多个参数传递给另一个函数
- 对可变参数函数的递归调用的链接器错误
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类