我想实现这个目标:
- second parameter by default set to first argument
就像是:
int foo (int a,int b = a);
但是怎么做呢?
非常感谢!
解决方法
这是禁止的:
8.3.6默认参数[dcl.fct.default]
9) Default arguments are evaluated each time the function is called.
The order of evaluation of function arguments is unspecified.
Consequently,parameters of a function shall not be used in default
argument expressions,even if they are not evaluated. Parameters of a
function declared before a default argument expression are in scope
and can hide namespace and class member names. [ Example:
int a;
int f(int a,int b = a); / / error: parameter a
/ / used as default argument
typedef int I;
int g( float I,int b = I (2)); / / error: parameter I found
int h(int a,int b = sizeof (a )); / / error,parameter a used
/ / in default argument
—end example ]
另一种方法是重载:
int foo(int a,int b); int foo(int a) { return foo(a,a); }