成员代表职能

时间:2017-09-23 13:29:59

标签: c++ function class initialization member

我搜索过很多关于成员函数委托的内容,但我没有找到任何关于它的内容。也许我搜索了错误的单词......

我尝试做以下事情:

    class Foo1 {
        int bar(int a, int b = 1, bool c = false);
        int bar(int a, bool c);
    }

    // Can I write it like:
    class Foo2 {
        int bar(int a, int b = 1, bool c = false);
        // This line is my question:
        int bar(int a, bool c) : bar(a, 1, c);
    }

我的编译器说只有构造函数接受初始化列表,但我想我在某处读过类似的东西。是否只有构造函数采用init列表的规则有例外吗?

2 个答案:

答案 0 :(得分:0)

错误信息非常清楚,您无法在会员功能中执行此类委托。

你可以做的只是在一些成员函数中调用一些其他成员函数,传递一个参数,如:

class Foo1 {
    int bar(int a, int b = 1, bool c = false);
    int bar(int a, bool c);
}

// Can I write it like:
class Foo2 {
    int bar(int a, int b = 1, bool c = false);

    // Should be inlined by default, but won't hurt to specify it explicitly
    inline int bar(int a, bool c) {
        return bar(a, 1, c);
    }
}

使用两个参数调用bar不应该有任何性能缺陷。

答案 1 :(得分:0)

init-list用于初始化类对象的基础和成员,这只对类构造函数有意义。函数没有任何内容可以初始化(函数参数除外,它们是从每次调用时传递的参数自动初始化的。)

但是将一个函数推迟到另一个函数很容易:你只需在第一个函数体中调用另一个函数。

class Foo2 {
    int bar(int a, int b = 1, bool c = false);
    int bar(int a, bool c) { return bar(a, 1, c); }
};