我想做以下事情:
class MyClass {
public:
MyClass() : arr({1,2,3,4,5,6,7,8}) {}
private:
uint32_t arr[8];
};
但它不起作用(编译器:在'}'标记之前的预期主表达式。)。我已经查看了其他SO问题,人们正在传递像std::initializer_list
这样的东西,并尝试一些有趣的事情,例如将数组初始化器放在双括号中,如下所示:
MyClass() : arr( {{1,2,3,4,5,6,7,8}} ) {}
但我不熟悉std::initializer_list
的目的,而且我也不太清楚为什么上面的代码中有双重括号(虽然它无论如何都不起作用,所以我不知道为什么呢事项)。
在构造函数初始化列表中是否有正常的方法来实现arr
变量的初始化?
答案 0 :(得分:4)
您的语法是正确的。或者,您可以说arr{1,2,3,...}
。
最有可能的是你的编译器还不支持这种结构。 GCC 4.4.3和4.6.1都做(-std=c++0x
)。
答案 1 :(得分:1)
使用-std = gnu ++ 0x在GCC 4.5.2上完美运行。我收到警告并冻结-std = c ++ 98。