初始化列表中的initializer_list

时间:2014-04-13 01:26:30

标签: c++ c++11 initializer-list initialization-list

我想用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 }}

并将其传递给基类。

2 个答案:

答案 0 :(得分: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 }});
}

答案 1 :(得分:0)

它说array可以使用&#34;大括号封装的初始化程序&#34;来初始化。和你的第一个ctor一样,但不是你的第二个initializer_list。没有带有initializer_list的数组ctor。实际上,除了隐式声明的特殊成员函数之外,没有数组的ctors。