构造函数的初始化列表

Initialization list to constructor

本文关键字:列表 初始化 构造函数      更新时间:2023-10-16

我正在学校做一项作业,我们应该为自己的list -class创建一个构造函数,该构造函数接受初始化列表作为参数。

这是我希望能够做到的:

List ourList {1, 2, 3};

这是我目前为止写的:

List::List(std::initializer_list<int> il)
{
  head_ = copy(il.begin(), il.end());
}
List_Node* List::copy(std::initializer_list<int>::iterator begin,
                      std::initializer_list<int>::iterator end)
{
  if(begin == end)
    return nullptr;
  List_Node* new_list = new List_Node(*begin);
  List_Node* node = copy(begin++, end);
  new_list->next_ = node;
  return new_list;
}

在我看来,这应该工作得很好。然而,当我尝试初始化(List list {1,2,3};)时,我得到了一个隔离错误。谁能解释一下我在这里做错了什么吗?

List_Node* node = copy(begin++, end);

这将使用相同的参数再次调用copy,永远递归并且永远不完成。

您应该能够通过使用调试器来查看它崩溃的位置来判断这一点,并且您将看到有数百个对List::copy的调用,而不是您预期的三个调用。

你想要++begin而不是begin++