Почему C ++ 20 не поддерживает указанный инициализатор не по порядку?

Пока я читал C ++ ссылка, У меня был вопрос об этом абзаце:

Примечание: инициализация обозначена не по порядку, обозначена как вложенная
инициализация, смешивание назначенных инициализаторов и регулярных
инициализаторы и назначенная инициализация массивов все
поддерживается в языке программирования C, но не допускается в C ++.

Есть ли какая-либо техническая причина, которая мешает C ++ поддерживать не назначенную инициализацию?

3

Решение

Да, обоснование кроется в Приложение C (информативное)
Совместимость
конкретно [Diff.dcl] р10 (акцент мой):

Затрагиваемый подпункт: [dcl.init.aggr] Изменение: в C ++ обозначено
поддержка инициализации ограничена по сравнению с соответствующей
функциональность в C. В C ++ обозначения для нестатических членов данных
должен быть указан в заявлении, обозначения для элементов массива
и вложенные указатели не поддерживаются, а обозначенные и
неназначенные инициализаторы нельзя смешивать в одном и том же инициализаторе
список. Пример:

struct A { int x, y; };
struct B { struct A a; };
struct A a = {.y = 1, .x = 2};  // valid C, invalid C++
int arr[3] = {[1] = 5};         // valid C, invalid C++
struct B b = {.a.x = 0};        // valid C, invalid C++
struct A c = {.x = 1, 2};       // valid C, invalid C++

Обоснование: В C ++ элементы уничтожаются в обратном порядке построения, а элементы списка инициализатора оцениваются в лексическом порядке, поэтому инициализаторы полей должны быть указаны в порядке.
Указатели массива конфликтуют с синтаксисом лямбда-выражений.
Вложенные указатели используются редко.

первый пересмотр предложения Также обсуждается эта тема:

Чтобы соответствовать этим ожиданиям для гарантированного разрешения копирования, мы требуем, чтобы указатели появились
как подпоследовательность последовательности объявления элемента данных, так что порядок оценки
соответствует порядку объявления, и это также текстовая слева в назначенной инициализации

Вы можете получить последнюю ревизию Вот.

8

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector