默认参数问题(c ++)

时间:2012-12-16 07:31:15

标签: c++ class pointers

  

可能重复:
  Nonstatic member as a default argument of a nonstatic member function
  Why can member variables not be used as defaults for parameters?

好的,如果我没有在这里看到一些非常简单的东西或忘记C ++的一些基本规则,我提前道歉但我不确定为什么这不能按预期工作。

以下是我无法开展工作的代码示例

class Foo
{
private:
    Bar *ptrBar;
public:
    void doSomething(int x, Bar *p = ptrBar);
}

编译器遇到此函数的默认参数问题。有什么理由说这不起作用。

基本上doSomething会对Bar对象进行一些操作,我希望它是ptrBar默认指向的那个。除非我忘了什么,否则一切似乎都是合理的?

2 个答案:

答案 0 :(得分:5)

您不允许使用类成员作为默认参数,也不允许使用this

8.3.6默认参数[dcl.fct.default]

  

[...]类似地,非静态成员不得在默认参数中使用,即使它不是   除非它显示为类成员访问表达式(5.2.5)的id-expression或者除非它是   用于形成指向成员的指针(5.3.1)。 [...]

最好的解决方法是使用重载:

class Foo
{
private:
    Bar *prtBar;
public:
    void doSomething(int x, Bar *p);
    void doSomething(int x)
    {
        soSomething(x, ptrBar);
    }
}

答案 1 :(得分:1)

在编译器对此进行评估时,未设置ptrBar。因此,您的默认参数没有默认值。

为什么不使用默认值null,如果p中的doSomething()为null,则使用ptrBar成员。