如何在初始化列表中初始化正常的数组成员变量?

时间:2011-09-22 15:23:28

标签: c++ stl

我想做以下事情:

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变量的初始化?

2 个答案:

答案 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。