170 похожих чатов

Скажите, почему в С++20 в designated initialization порядок инциализаторов обязан

совпадать с порядком декларации членов?
В чём сысл делать не так как в C99, где порядок не имеет значения. В этом-то и польза подобного синтаксиса — не надо вспоминать, как там что определено. Ты явно задаёшь имя члена, снижая шанс ошибиться.

8 ответов

5 просмотров

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

Если ты меняешь порядок в списке инициализации, это не значит, что меняется порядок конструирования. Важно, когда инициализация имеет зависимые друг от друга члены данных

В C99 нет конструкторов. В C++ порядок инициализации членов класса явно прописан, designated initializers можно было задизайнить 4мя способами * как сейчас * с неявным вызовом дефолтных конструкторов при несовпадении поряда * переделать очерёдности инициализации (тут куча проблем) * неявно инициировать в правильном порядке (что может быть очень неожиданно для пользователей) Выбрали самый простой и надёжный способ

🐙 Antony Polukhin
В C99 нет конструкторов. В C++ порядок инициализац...

То есть неявно инициализировать в правильном порядке в списке инициализаторов конструктора - это ОК, а неявно инициализировать в правильном порядке в initializer_list (это видимо не он, но тут давайте этот термин употребим) - это НЕ, ЗАПУТАЕМ ПОЛЬЗОВАТЕЛЕЙ ЯЗЫКА! Ну да. Логично.

Stas- Автор вопроса
🐙 Antony Polukhin
В C99 нет конструкторов. В C++ порядок инициализац...

Хорошо. Но зачем тогда все эти жёсткие ограничения на aggregate type: отсутствие конструкторов, в том числе дефолтных и удалённых?

Stas
Хорошо. Но зачем тогда все эти жёсткие ограничения...

чтобы не уложнять правила по выборку перегруженного метода

Ilya Zviagin
То есть неявно инициализировать в правильном поряд...

то что раньше сделали плохо, не значит что надо делать плохо и сейчас

🐙 Antony Polukhin
то что раньше сделали плохо, не значит что надо де...

У меня есть друг он говорит "пусть безобразно, зато единообразно"

Похожие вопросы

Обсуждают сегодня

кому не сложно распишите пожалуйста для какой цели тут вот эти скобки и в них пихается указатель?
Михаил Helper
15
Комрады, посоветуйте, куда копать? Стал прикручивать кастомизацию тем. В OnShow главной главной формы пытаюсь загрузить из файла настроек и применить тему (на скрине, как долж...
Ed Doc
13
Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
OnShow один раз вызывается? или возможен Hide?
Iluha Companets
14
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Всем привет, на линуксе лучше на fasm или nasm учиться писать для начала ?
meszjol
14
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
Карта сайта