c++ - 构造函数的初始化列表

标签 c++ c++11 initialization initialization-list

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

这是我希望能够做的:

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++

关于c++ - 构造函数的初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22610910/

相关文章:

c++ - 从 X11 请求图像,用 C 或 C++ 合成 WM

c++ - 在类构造函数中初始化类的 std::array

c++ - “Strange”内存泄漏-TCP网络

c - 初始化多维数组 : {0} versus {{{0}}}

c++ - 在 C++ 中是否可以在初始化时覆盖虚拟方法?

c++ - 使用 Qt5 编译 Qt3D 失败

c++ - MFC BitBlt 和 SetDIBits 与 SetBitmapBits

c++ - 我怎么知道一个目录是VB6中的回收站?

c++ - 在 C++11 中实现 boost::optional

java - 初始化 block 的行为