我想要一个函数参数将其他参数的值作为默认值。将其他参数作为默认值的函数参数
我的问题是:为什么我不允许这样做?
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)
{
}
并且还有其他方法可以做到吗?
void foo(int a)
{
foo(a,a);
}
void foo(int a, int b)
{
}
- 为什么我不能这样做呢?
因为函数参数的计算顺序是不确定的,它不能保证b
将传递进来的a
参数值进行初始化。
从$8.3.6/9 Default arguments [dcl.fct.default]:
默认参数每个函数被调用 为相应的参数没有参数时间来评价。在默认参数中,参数 不会显示为潜在评估的表达式。
[实施例:int a; int f(int a, int b = a); // error: parameter a // used as default argument
和
- ,是有一个其他的方式来做到这一点比?
使用函数重载会很简单。
使用
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 ...
- 结束举例]
此链接将帮助您http://stackoverflow.com/questions/4989483/where-to-put-default-parameter-value-in-c –