The following code won't compile. Why?
class A
{
int j;
void f( int i = this->j );
}
Edit, for clarity. This is what I was trying to do, using less lines of code...
class A
{
void f( int i ){};
void f( );
int j;
};
void A::f()
{
f( j );
}
Others have already commented on the reason this doesn't work. From one of the comments:
You could use
optional
to eliminate the extra function although I'm not sure it's clearer:void f( boost::optional<int> i = boost::none ) { if(!i) i = j; ... }
Default argument values are bound at compile time.
"this" is only defined at run time, so can't be used.
See here for a fuller explanation: Must default function parameters be constant in C++?