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 );
}
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++?
Others have already commented on the reason this doesn't work. From one of the comments:
"...The expression can combine functions that are visible in the current scope, constant expressions, and global variables. The expression cannot contain local variables or non-static class-member variables..."
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; ... }
来源:https://stackoverflow.com/questions/12828216/not-possible-this-pointer-as-a-default-argument-why