Not possible: this pointer as a default argument. Why?

前端 未结 2 632
日久生厌
日久生厌 2020-12-10 06:12

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

相关标签:
2条回答
  • 2020-12-10 06:39

    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; ... }

    0 讨论(0)
  • 2020-12-10 06:57

    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++?

    0 讨论(0)
提交回复
热议问题