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

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

本文关键字:默认 参数 为什么 指针 不可能      更新时间:2023-10-16

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

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

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

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

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

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

"...表达式可以组合在 当前作用域、常量表达式和全局变量。这 表达式不能包含局部变量或非静态类成员 变数..."

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

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