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)
这是使用委托构造函数的迂回解决方案:
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)