Как инициализировать агрегатные типы с помощью инициализации списка

Как можно инициализировать агрегатные типы в C ++ 14 с помощью синтаксиса списочной инициализации?

Aggregate_t {};

Это рассматривается как совокупная инициализация, которая выдает ошибки или предупреждения для неинициализированных членов Aggregate_t,

Это вообще возможно?

РЕДАКТИРОВАТЬ: Примеры

struct Aggregate_t {
int x;
};

int main (int, char**)
{
Aggregate_t {};
return 0;
}

Компиляция с g ++ — 4.9.2:

main.c++: In function ‘int main(int, char**)’:
main.c++:7:16: warning: missing initializer for member ‘Aggregate_t::x’ [-Wmissing-field-initializers]
Aggregate_t {};
^

1

Решение

[Dcl.init.aggr]:

7 — если их меньше инициализатора-статьи в списке, чем есть элементы в совокупности, то каждый элемент, не инициализированный явно, должен быть инициализирован [C ++ 14: от его скобки или равно-инициализатор или, если нет скобки или равно-инициализатор,] из пустого списка инициализаторов (8.5.4).

Таким образом, g ++ переусердствует со своим предупреждением; Я не знаю, как избежать этого, сохраняя его в случаях, когда предупреждение действительно, за исключением, конечно, использования инициализации копирования с ожидаемым разрешением копирования:

Aggregate_t a = Aggregate_t();
2

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


По вопросам рекламы [email protected]