som*_*guy 11 c++ initializer-list
#include <vector>
struct foo {
int i;
int j;
int k;
};
int main() {
std::vector<foo> v(1);
v[0] = {0, 0, 0};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用g ++编译时,我收到以下警告:
警告:扩展初始化列表仅在-std = c ++ 0x或-std = gnu ++ 0x [默认启用]时可用
据我所知,它只是一个普通的初始化列表.结构是POD类型.
这是一个错误还是我错过了什么?
Mar*_*k B 22
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;
}
Run Code Online (Sandbox Code Playgroud)
Ker*_* SB 11
聚合的括号初始化仅在声明初始化期间有效:
Foo a = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
它不是一种在中途产生临时工的方法:.some_function(true, {1,2,3}, 'c')
C++ 11添加了统一的初始化,您可以在其中编写f(Foo{1,2,3});.