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

C++ 不可能:将此指针作为默认参数。为什么?,c++,arguments,this,default-value,this-pointer,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 ); } 默认参数值在编译时绑定 “this”仅在运行时定义,因此不能使用 请参阅此处以获得更全面的解释: 其他人已经对这不起作用的原因发表

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

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”仅在运行时定义,因此不能使用

请参阅此处以获得更全面的解释:

其他人已经对这不起作用的原因发表了评论。根据其中一条评论:


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

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


void f(boost::optional i=boost::none){if(!i)i=j;…}

您在这里想做什么?因为实例不在参数声明的作用域内。。。?“…表达式可以组合当前作用域中可见的函数、常量表达式和全局变量。表达式不能包含局部变量或非静态类成员变量……“@ Jordan Kaye——我已经编辑过,回答您的问题……我试图使用更少的代码行……如上面所描述的。但是为什么C++是这样设计的,默认参数必须在编译时绑定?……Alxand Recac这是另一个问题。