默认参数问题(c ++)

Mad*_*gre 1 c++ pointers class

可能重复:
非静态成员作为非静态成员函数的默认参数
为什么成员变量不能用作参数的默认值?

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

这是一个我无法工作的代码示例

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

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

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

Luc*_*ore 5

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

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

[...]类似地,非静态成员不应在默认参数中使用,即使它未被计算,除非它显示为类成员访问表达式的表达式(5.2.5)或除非它用于形成指向成员的指针(5.3.1).[...]

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

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