8

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

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 );
}
4

2 回答 2

11

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

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

有关更完整的解释,请参见此处: 默认函数参数必须在 C++ 中保持不变吗?

于 2012-10-10T21:00:55.490 回答
0

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

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

optional尽管我不确定它是否更清晰,但您可以使用它来消除额外的功能:

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

于 2012-10-10T21:10:49.930 回答