Почему это считается расширенным списком инициализаторов?
#include <vector>
struct foo {
int i;
int j;
int k;
};
int main() {
std::vector<foo> v(1);
v[0] = {0, 0, 0};
return 0;
}
При компиляции с использованием g++ я получаю следующее предупреждение:
предупреждение: расширенные списки инициализаторов доступны только с -std = С++ 0x или -std = gnu ++ 0x [включено по умолчанию]
Насколько я могу судить, это просто обычный список инициализаторов. Структура представляет собой тип POD.
Является ли это ошибкой или я что-то не хватает?
Ответы
Ответ 1
Pre С++ 11 (и, возможно, C99), вы можете инициализировать POD только при создании, а не в произвольных точках выполнения, что вы пытаетесь сделать здесь (назначение из списка инициализаторов).
Вы можете сделать null_foo, хотя:
int main()
{
const foo null_foo = {0, 0, 0};
std::vector<foo> v(1);
v[0] = null_foo;
return 0;
}
Ответ 2
Инициализация скобок для агрегатов действительна только во время инициализации объявления:
Foo a = { 1, 2, 3 };
Это не способ генерации временных рядов: some_function(true, {1,2,3}, 'c')
.
С++ 11 добавляет единую инициализацию, в которой вы действительно можете написать f(Foo{1,2,3});
.