繁体   English   中英

初始化列表中的 initializer_list

[英]initializer_list in 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 }}

并将其传递给基类。

std::array没有采用std::initializer_list构造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 }});
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM