在构造函数中初始化多个相关const属性的最简单方法?

Vic*_*sky 10 c++ constructor const

当C++类的多个const属性依赖于某些中间计算时,初始化它们的最简单方法是什么?

例如,如何更正下面类的构造函数?

class MyClass {
public:
    const int a;
    const int b;

    MyClass() {
        int relatedVariable = rand() % 250;
        a = relatedVariable % 100;
        b = abs(relatedVariable - 150);
    }
};
Run Code Online (Sandbox Code Playgroud)

Dan*_*rey 11

使用C++ 11,您可以简单地使用委托构造函数:

class MyClass
{
public:
    const int a;
    const int b;

private:
    MyClass( int relatedVariable )
      : a( relatedVariable % 100 ),
        b( abs( relatedVariable - 150 ) ) {}

public:
    MyClass() : MyClass( rand() % 250 ) {}
};
Run Code Online (Sandbox Code Playgroud)


Ker*_* SB 6

这是使用委托构造函数的迂回解决方案:

class MyClass
{
    MyClass(int aa, int bb) : a(aa), b(bb) { }

    static MyClass Maker() { int x = /* ... */; return MyClass(x * 2, x * 3); }

    int const a;
    int const b;

public:
    MyClass(MyClass const &) = default;
    MyClass() : MyClass(Maker()) { }
};
Run Code Online (Sandbox Code Playgroud)