Инициализация всех элементов происходит до запуска тела конструктора.Поэтому, если вы сделали это:
MyClass::MyClass()
{
myMember = MyMember(calculatedValue,this,5,"etc.");
}
, это будет присваивание, а не инициализация.Так что это не будет работать, если MyMember
s не присваиваются (например, у них есть частный оператор присваивания).Это также не будет работать, если myMember
объявлено как const
.
Однако вы можете сделать что-то вроде этого:
class MyClass {
public:
MyClass() : myMember(calculate(VALUE),this,5,"etc.") {}
private:
static int calculate(int x) { return x*3; }
};
или даже что-то вроде этого:
class MyClass {
public:
MyClass() : myMember(createMember()) {}
private:
static MyMember createMember(int x) {
MyMember m;
m.foo = 5;
...
return m;
}
};
Обратите внимание, что здесь я использовал вспомогательные функции static
, потому что использование не-1016 * функций-членов до завершения работы конструктора становится немного странным, в общем случае.