воскресенье, 20 февраля 2011 г.

44. В каком порядке инициализируются поля в классе? Совпадает ли этот порядок с порядком перечисления инициализаторов в списке инициализации конструктора?

struct A1{
  A1(){cout<<1;}
};

struct A2{
  A2(){cout<<2;}
};

class B{
  A1 x;
  A2 y;
public:
  B():y(),x(){}
};

int main() {
  B b;
}

Сначала объявлен член x, затем y. А в списке инициализации обратный порядок. Посмотрим что важнее. Запускаем. Получим "12". Все верно, ведь инициализация происходит в порядке объявления их в классе, а не в списке инициализации (так написано в спецификации).

А еще MinGW предупреждает:
In constructor 'B::B()':
|18|warning: 'B::y' will be initialized after
|17|warning: 'A1 B::x'
|20|warning: when initialized here


y будет проинициализирован позже, чем x, несмотря на порядок в списке инициализации.

Комментариев нет:

Отправить комментарий

Можно использовать теги <b>, <i>