В опубликованном вами примере нет абсолютно никакой разницы в поведении. Агрегат инициализируется для хранения тех же трех значений. С точки зрения удобочитаемости можно утверждать, что назначенная версия инициализатора более четко описывает происходящее. Его также можно использовать для документирования. Предполагаемое значение каждого инициализатора (при условии, что мы правильно назвали элементы) написано прямо рядом с ним.
За пределами явной инициализации. Назначенные инициализаторы также хорошо сочетаются с другими функциями C ++. Рассмотрим вместо этого.
struct Subject{
int x = 0;
int y = 0;
int z = 0;
};
Вы можете написать
Subject const s { .y = 2 };
We go со значением по умолчанию для всех полей, кроме y
. А переменная s
- const, потому что мы не хотим ее менять. Это хорошо с точки зрения корректности констант.
Вы можете добиться аналогичного эффекта без обозначенных инициализаторов, но это потребует гораздо большего количества шаблонов, если мы хотим, чтобы s
оставалось константой, и, возможно, это было бы не так лаконично и ясно. Вот почему их так приятно иметь на языке.