#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 = c ++ 0x或-std = gnu ++ 0x [默认启用]
据我所知,它只是一个普通的初始化列表。结构是POD类型。
这是一个错误还是我错过了什么?
答案 0 :(得分:21)
Pre C ++ 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;
}
答案 1 :(得分:9)
聚合的括号初始化仅在声明初始化期间有效:
Foo a = { 1, 2, 3 };
是一种在中途生成临时的方法: 。some_function(true, {1,2,3}, 'c')
C ++ 11添加统一初始化,您可以在其中编写f(Foo{1,2,3});
。