2

我想用std::initializer_list.

struct A : public std::array<int, 4>
{
  // This constructor works fine
  A()
  : std::array<int, 4>{{ 1, 2, 3, 4 }}
  {
  }

  // THIS CONSTRUCTOR FAILS TO COMPILE
  A(std::initializer_list<int> il)
  : std::array<int, 4>{il}
  {
  }
};

第二个构造函数的 GCC 错误是

错误:数组必须用大括号括起来的初始化程序初始化

我想要的是像这样用 initializer_list 初始化新的 A 实例

A var{{ 1, 2, 3, 4 }}

并将其传递给基类。

4

2 回答 2

2

该类std::array没有构造函数采用std::initializer_list.

你唯一的方法就是这样做:

#include <array>
#include <initializer_list>

struct A : public std::array<int, 4>
{
    A()
    : std::array<int, 4>{{ 1, 2, 3, 4 }}
    {
    }

    A(std::array<int, 4> il)
    : std::array<int, 4>(il)
    {
    }
};

int main ()
{
    A a ({{ 1, 2, 3, 4 }});
}
于 2014-04-13T02:01:18.903 回答
0

它是说 anarray可以像在你的第一个 ctor 中那样使用“大括号封闭的初始化程序”进行初始化,但不能initializer_list像你的第二个那样使用 an 进行初始化。没有采用 initializer_list 的数组 ctor。事实上,除了隐式声明的特殊成员函数之外,没有数组的 ctors。

于 2014-04-13T01:56:54.177 回答