Если я определяю структуру, которая наследуется от нескольких других структур, как порядок, в котором я перечисляю их, влияет на что-то вроде этого:
struct D: C,B{
D(): B(), C(){...}
};
Простой вопрос, но заранее спасибо!
Порядок построения зависит от последовательности наследования. Порядок инициализации не имеет значения. GCC фактически выдает предупреждение в этом случае.
В конструкторе ‘D :: D ()’:
main.cpp: 16: 17: предупреждение: база ‘B’ будет инициализирована после
[-Wreorder]D(): B(), C(){ ^
main.cpp: 16: 17: предупреждение: база ‘C’ [-Wororder]
main.cpp: 16: 5: предупреждение: при инициализации здесь [-Wreorder]
D(): B(), C(){
Это также четко указано в стандарте. Из раздела 12.6.2 Инициализация баз и членов
Инициализация происходит в следующем порядке:
— Сначала и только
для конструктора самого производного класса, как описано ниже,
виртуальные базовые классы должны быть инициализированы в порядке их появления
первый слева направо обход глубины направленного ациклического графа
базовые классы, где «слева направо» — порядок появления
имена базовых классов в производном списке базовых спецификаторов.
— Затем, прямые базовые классы должны быть инициализированы в порядке объявления, так как они
появляются в списке базовых спецификаторов (независимо от порядка
MEM-инициализаторы).
Других решений пока нет …