以下代码无法编译。为什么呢?
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 );
}
答案 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; ... }