C++ 如何创建用列表初始化的构造函数?

C++ 如何创建用列表初始化的构造函数?,c++,list,c++11,constructor,C++,List,C++11,Constructor,如何使用包含n个元素的列表初始化构造函数 X x = {4, 5, 6, ...}; 您是否在询问如何创建接受初始值设定项列表的构造函数 #include <initializer_list> class X { public: X(std::initializer_list<int> ilist); }; #包括 X类{ 公众: X(标准:初始值设定项列表); }; 您可以定义所谓的初始值设定项列表构造函数,并使用类std::initializer\u lis

如何使用包含n个元素的列表初始化构造函数

X x = {4, 5, 6, ...};

您是否在询问如何创建接受
初始值设定项列表的构造函数

#include <initializer_list>

class X {
public:
  X(std::initializer_list<int> ilist);
};
#包括
X类{
公众:
X(标准:初始值设定项列表);
};

您可以定义所谓的初始值设定项列表构造函数,并使用类
std::initializer\u list
的迭代器访问列表中的元素

根据C++标准

如果初始值设定项列表构造函数的第一个参数的类型为 std::初始值设定项\u列表或引用可能符合条件的cv 某些类型E的初始值设定项列表,或者没有 其他参数或所有其他参数都有默认参数

比如说

#include <iostream>
#include <vector>
#include <initializer_list>

class A
{
public:
   A() = default;
   A( std::initializer_list<int> l ) : v( l ) {}
   std::vector<int> v;
};

int main() 
{
    A a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    for ( int x : a.v ) std::cout << x << ' ';
    std::cout << std::endl;

    return 0;
}
#包括
#包括
#包括
甲级
{
公众:
A()=默认值;
A(std::初始值设定项_list l):v(l){
std::向量v;
};
int main()
{
A={1,2,3,4,5,6,7,8,9};

对于(intx:a.v)std::cout对于包含n个元素的列表,您需要使用std::initializer\u list

初始值设定项列表对象自动构造为数组 已分配类型为T的元素的个数,每个元素位于 正在复制初始化到数组中相应元素的列表, 使用任何必要的非收缩隐式转换

下面是一个例子:

#include <iostream>
#include <initializer_list>
#include <vector>

template<class T>
class X {
  long unsigned int size;
  std::vector<T> _elem;
public:
  X(std::initializer_list<T> l): size{l.size()} {
    for(auto x: l)
      _elem.push_back(x);
  }

  void print() {
    for(auto x: _elem)
      std::cout << x << " ";
  }
};

int main(int argc, char **argv) {
  X<int> x = {4, 5, 10 ,8 ,6};
  x.print();
  return 0;
}
#包括
#包括
#包括
模板
X类{
长无符号整数大小;
标准:向量元素;
公众:
X(std::initializer_list l):大小{l.size()}{
用于(自动x:l)
_元素推回(x);
}
作废打印(){
用于(自动x:_元素)
标准::cout