Порядок выполнения списка инициализации конструктора с делегированными конструкторами

У меня сложный вопрос C++: когда у вас есть список инициализации конструктора с делегированными конструкторами, каков порядок выполнения списка?

Здесь существуют два противоречивых стандартных правила:
1.) Список инициализации конструктора выполняется НЕ порядком списка, а порядком объявления элементов.
2.) Делегированные конструкторы в списке инициализации конструктора всегда вызываются до выполнения "материнского конструктора".

Какое правило выше? (поскольку конструктор также является элементом класса) Почему это важно: предположим, что делегированный конструктор повторно вводит элемент, уже инициализированный "материнским конструктором", или наоборот.

1 ответ

Решение

§12.6.2/6 говорит

Если mem-initializer-id обозначает класс конструктора, он должен быть единственным mem-initializer... Как только целевой конструктор возвращается, выполняется тело делегирующего конструктора.

Таким образом, нет никакого конфликта, так как вы не можете ничего инициализировать перед тем, как делегировать конструктор. Делегирование конструктора просто вызывает этот конструктор, запускается список инициализатора целевого конструктора, запускается целевой конструктор, а затем запускается главный конструктор.

Другие вопросы по тегам