c++ - Why I cannot use previous argument values to define argument default values? -


for example, why cannot write this:

void f(double x, double y = x); 

to declare function f, call f(x) equivalent f(x,x)?

in case doesn't seem useful you, here's possible usage scenario. in example, declare f follows:

void f(double x, double y = expensivecomputation(x)); 

where expensivecomputation denotes, guessed it, function slow computation. want give user of f possibility of passing in value of y if has computed previously, don't have compute again inside f. now, of course can resolve writing 2 overloads:

void f(double x, double y); void f(double x) { f(x, expensivecomputation(x)); } 

but writing overloads becomes tiresome number of arguments grows. example, try write:

void f(double x, double p = expensivecomputation(x),                   double q = expensivecomputation2(x, p),                   double r = expensivecomputation3(x, p, q),                  double s = expensivecomputation3(x, p, q, r)); 

using overloads. it's uglier. default arguments sexy. there deeper syntactic reason why previous arguments can't used define argument default values?

i don't know why default argument can't go way, maybe can try wrap arguments in struct(class)?

struct paramset {     double x;     double p;     double q;      paramset(double x)         : x(x)         , p(expensivecompute1(x))         , q(expensivecompute2(x, p))     {     }     paramset(double x, double p)         : x(x)         , p(p)         , q(expensivecompute2(x, p))     {     }     paramset(double x, double p, double q)         : x(x), p(p), q(q)     {     }  private:     double expensivecompute1(double x) {}     double expensivecompute2(double x, double p) {} };       void f(paramset ps); 

still need ctor overloads, no more works writing expensivecomputation() series provided, , @ least things wrapped in struct

also, signature of f() fixed, , there 1 version.


Comments

Popular posts from this blog

dns - How To Use Custom Nameserver On Free Cloudflare? -

python - Pygame screen.blit not working -

c# - Web API response xml language -