c++ - 使用类成员函数/变量初始化默认参数

标签 c++ parameters default-arguments

class C {
private:
     int n{ 5 };

public:
    int return5() { return 5; }
    void f(int d = return5()) {

    }

    void ff(int d = n) {

    }


};

为什么我无法使用成员类初始化函数默认参数?我收到错误:非静态成员引用必须相对于特定对象。

我认为这个问题是因为还没有实例化对象,但是有什么方法可以做到这一点吗?

最佳答案

默认参数被认为是从调用方上下文提供的。它只是不知道可以调用非静态成员函数 return5 的对象。

您可以将 return5 设为 static 成员函数,它不需要调用对象。例如

class C {
    ...
    static int return5() { return 5; }
    void f(int d = return5()) {
    }
    ...
};

或者创建另一个重载函数

class C {
private:
     int n{ 5 };
public:
    int return5() { return 5; }
    void f(int d) {
    }
    void f() {
        f(return5());
    }
    void ff(int d) {
    }
    void ff() {
        ff(n);
    }
};

关于c++ - 使用类成员函数/变量初始化默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63406706/

相关文章:

c++ - UML 模型关系是如何用 C++ 编码的?

c++ - 处理 main 中的可选参数

c++ - 如何确定用户是否为默认参数指定了值?

c++ - 在 C++ 中实现链表,我哪里出错了?

c++ - 在围绕一个点的圆圈中创建对象

c++ - 在此上下文中使用符号 (&) 的说明

layout - 更改 latex 文档中间的纸张尺寸?

swift - 类名作为 swift 中的函数参数

templates - 模板表达式的默认参数

将默认值设置为对象的PHP函数