Другие языки программирования и технологии

C++. Подскажите ответ, есть какие нибудь правила инициализации вложенных структур ?

Например, сначала нужно инициализировать самую глубоко вложенные структуру, а затем подниматься вверх ?
Да, есть рекурсивные правила.
Сначала создаются виртуальные родители, потом прямые родители, потом вложенные члены в том порядке, в котором они описаны в классе (порядок в списке инициализации в конструкторе при этом не важен) .

Если порядoк описания членов в самом классе отличается от порядка в списке инициализации контсруктора, то приличный компилятор выдаст warning.

Правило применяется рекурсивно к родителям и членам класса.

При разрушении все происходит в обратном порядке.
Пример (здесь цифры соответсвуют порядку создания) :

class A: virtual C1, C3, virtual C2, C4 {
SomeClass c5, c6;
SomeClass c7, c8;

A(): c5(), C4(), C3(), C1() {}// здесь порядок не важен совершенно
};

PPS

http://habrahabr.ru/post/58818/

Вот Вам чтиво. Только тут очень простая статья на Хабре, дело в ней ограничивается одними лишь членами класса, родителей и виртуальных родителей там нет.

Но если Вам нужны пруфлинки для моего полного ответа, то это должно легко гуглиться, "C++ initialization order" или "порядок инициализации C++".
Aslan21_71 Лукпанов
Aslan21_71 Лукпанов
19 662
Лучший ответ
Это не "нужно", это само происходит - если определены конструкторы.
А если не определены - то это исключительно проблемы разработчика, как и что инициализировать.
РК
Риф Камов
93 804
Скорее наоборот инициализируешь основную структуру, а потом наследованием инициализируешь последующие, например:
struct a

{ int count; };

struct b : public a

{ char k; };

и тогда структура б помимо своей переменной будет наследовать и переменную структуры а. .

объявление в теле:

b exp;

cin>>exp.count;

cin>> exp.k;
. .
. .
422