C++ 初始化列表中的初始化器\u列表
我想用C++ 初始化列表中的初始化器\u列表,c++,c++11,initializer-list,initialization-list,C++,C++11,Initializer List,Initialization List,我想用std::initializer\u 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::initializer\u 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}
{
}
};
并将其传递给基类。这意味着
数组可以像在第一个ctor中那样用“括号内的初始值设定项”进行初始化,但不能像在第二个ctor中那样用初始值设定项列表进行初始化。没有接受初始值设定项列表的数组构造函数。事实上,除了隐式声明的特殊成员函数外,数组没有任何构造函数。类std::array
没有采用std::initializer\u列表的构造函数
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}
{
}
};
你唯一的方法就是这样做:
#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 }});
}
#包括
#包括
结构A:公共std::数组
{
()
:std::数组{{1,2,3,4}
{
}
A(std::阵列il)
:std::数组(il)
{
}
};
int main()
{
A({1,2,3,4}});
}
似乎std::initializer\u list在这里隐式地强制转换为std::array。这会影响运行时性能吗?这里使用的不是std::initializer\u列表:std::array
uses。引用:[std::array]将C样式数组的性能和可访问性与标准容器[…]@Chnossos的优点结合在一起,虽然可以使用列表初始化来初始化数组,但不能使用实际的初始化器\u list
对象来初始化数组。Try:auto-il={1,2,3};阵列a(il)代码>那么我们应该对固定大小的对象使用聚合初始化,对可变大小的对象使用初始值设定项列表吗?@ShitImplementor只有在存在接受初始值设定项列表对象的ctor时,才可以使用初始值设定项列表对象。至于性能惩罚,对于移动构造函数来说,这应该不是问题。