如何列出初始化我自己的类

how can I list-initialize my own class?

本文关键字:自己的 我自己 初始化 何列出      更新时间:2023-10-16

我希望我自己的类可以像向量一样进行列表初始化:

myClass a = {1, 2, 3};

如何使用 C++11 功能执行此操作?

C++11 具有初始值设定项列表的概念。要使用它,请添加一个接受类型 std::initializer_list<T> 的单个参数的构造函数。例:

#include <vector>
#include <initializer_list>
#include <iostream>
struct S
{
  std::vector<int> v_;
  S(std::initializer_list<int> l)
    : v_(l)
  {
    std::cout << "constructed with initializer list of length " << l.size();
  }
};
int main()
{
    S s = { 1, 2, 3 };
    return 0;
}
可以

迭代initializer_list(像其他 STL 容器一样),并且可以查询size。这使您可以按照yuyoyuppe的另一个答案中的指出进行操作,立即将其提供给vector。但是,您可能有其他初始化意图,并执行一些操作,例如直接对列表中的项执行操作而不进行复制。

#include <initializer_list>
#include <iostream>
#include <algorithm>
struct S
{
  int thesum;
  int items;
  S(std::initializer_list<int> l) :
    thesum(std::accumulate(l.begin(), l.end(), 0)),
    items(l.size())
  {}
};
int main()
{
    S s = { 1, 2, 3 };
    std::cout << s.items << std::endl;
    std::cout << s.thesum << std::endl;
    return 0;
}

这打印

3
6

看:

  • http://www.cplusplus.com/reference/initializer_list/initializer_list/?kw=initializer_list
  • http://en.cppreference.com/w/cpp/utility/initializer_list
  • -