不可能:此指针作为默认参数。为什么?

时间:2012-10-10 20:57:54

标签: c++ arguments this default-value this-pointer

以下代码无法编译。为什么呢?

class A
{
   int j;
   void f( int i = this->j );
}

编辑,为清楚起见。这就是我尝试做的事情,使用较少的代码行......

class A
{
   void f( int i ){};
   void f( );
   int j;
};

void A::f()
{
    f( j );
}

2 个答案:

答案 0 :(得分:7)

默认参数值在编译时绑定。

“this”仅在运行时定义,因此无法使用。

请参阅此处以获得更全面的解释: Must default function parameters be constant in C++?

答案 1 :(得分:0)

其他人已经评论过这不起作用的原因。其中一条评论:

  

“...表达式可以组合在...中可见的函数   当前范围,常量表达式和全局变量。该   表达式不能包含局部变量或非静态类成员   变量......“

你可以使用optional来消除额外的功能,虽然我不确定它是否更清楚:

void f( boost::optional<int> i = boost::none ) { if(!i) i = j; ... }