Я думаю, что он предназначен для обхода инициализации по умолчанию, которая не выполняет инициализацию:
[dlc.init]:
Инициализация по умолчанию для объекта типа T означает:
(7.1) - Если T является (возможно, cv-квалифицированным) типом класса (раздел 12), рассматриваются конструкторы. Применимые конструкторы перечислены (16.3.1.3), и наилучший для инициализатора () выбирается с помощью разрешения перегрузки (16.3). Выбранный таким образом конструктор вызывается с пустым списком аргументов для инициализации объекта.
(7.2) - Если T является типом массива, каждый элемент инициализируется по умолчанию.
(7.3) - В противном случае инициализация не выполняется.
Я понимаю, что все объекты имеют инициализацию, но для некоторых объектов с инициализацией по умолчанию инициализация не выполняется. Обратите внимание, что в нем конкретно сказано, что « инициализация не выполняется », а не то, что она не существует.
У вас может быть инициализированный по умолчанию объект, для которого инициализация не была выполнена, поэтому он не может завершиться. Они не будут начинать свою жизнь, и с текущей формулировкой им не нужно ждать, пока это не начнется, для их начала. Также такой объект должен иметь инициализацию, потому что он инициализирован по умолчанию.
ИМХО, ваша формулировка будет иметь ошибку, или вы понимаете, что это вызовет логические последствия для 7.3 определения по умолчанию для инициализации, потому что такие объекты будут либо:
- Инициализировать и не начинать жить, потому что это не было выполнено.
- Инициализируется по умолчанию, но не будет инициализироваться. Я понимаю, что это может сбить с толку.
С текущей формулировкой это довольно ясно. Может быть, какое-то место могло бы явно сказать, какие объекты имеют инициализацию или что означает иметь инициализацию. Я думаю, что у всех так, но у меня нет под рукой прагмы.