【问题标题】:Not possible: this pointer as a default argument. Why?不可能:此指针作为默认参数。为什么?
【发布时间】:2012-10-01 10:45:09
【问题描述】:

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

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

【问题讨论】:

  • 因为实例不在参数声明的范围内...?
  • "...表达式可以组合当前作用域内可见的函数、常量表达式和全局变量。表达式不能包含局部变量或非静态类成员变量..."
  • @Jordan Kaye - 我已经编辑,以回答你的问题......我试图使用更少的代码行......如上所述。

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


【解决方案1】:

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

“this”只在运行时定义,所以不能使用。

查看这里以获得更完整的解释: Must default function parameters be constant in C++?

【讨论】:

  • 但是为什么 C++ 是这样设计的,默认参数必须在编译时绑定?...
  • @alexandreC 这是另一个问题。
【解决方案2】:

其他人已经评论了这不起作用的原因。来自其中一个 cmets:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多