到目前为止,我只看到了C ++中POD数组的赋值初始化。例如,
int array[]={1,2,3};
从here我了解到,当它在C ++ 11中的类/结构体内时,可以使用初始化列表方法初始化数组。但我尝试将数组定义为:
int array[]({1,2,3});
编译时发生错误:
array initializer must be an initializer list
我认为它只需要一些修改但我无法弄清楚。你能告诉我怎样才能实现它?
BTW,复制构造函数比这里的赋值更有效吗?我猜不是,但我不知道确切的答案。答案 0 :(得分:2)
不确定我是否正确理解了您的问题的上下文,但这是在构造函数的初始化列表中初始化数组的方式:
struct X
{
X() : arr{1, 2, 3} { }
// ^^^^^^^^^^^^
private:
int arr[3];
};
答案 1 :(得分:2)
POD数组无法使用类似构造函数(括号)语法进行初始化。如果要以统一的方式初始化变量,请使用初始化列表(大括号)语法初始化变量。例如,以下代码将使用gcc 4.7.3编译:
struct Foo
{
Foo(int a, std::string s);
}
int main()
{
// can also use parentheses on the next two lines
int a{3};
Foo f{a, "A string"};
// only curly braces can be used here
int arr[]{4, 5, 6};
return 0;
}
花括号语法还允许你使用std :: initializer_list以与数组相同的方式构造向量和其他STL类型,这只能用括号如下:
std::vector<int> v{1, 2, 3, 4, 5};
// contrast with
std::initializer_list<int> i{1, 2, 3, 4, 5}; // must use curly braces here
std::vector<int> v(i);