构造函数的初始化列表
Initialization list to constructor
我正在学校做一项作业,我们应该为自己的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++
相关文章:
- 复制列表初始化的隐式转换的等级是多少
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- C++11 中的混合列表初始化
- 我可以列表初始化 std::vector 并完美转发元素吗?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- C++20 从括号中的值列表初始化聚合,不支持内部数组
- 如何在向量列表初始化时避免对象复制以及如何延长临时的生存期
- 默认参数和空列表初始化
- 如何在列表初始化中放置额外的语句?
- C++列表初始化允许多个用户定义的转换
- 列表初始化是否将原子初始化为零
- 使用可变模板列表初始化数组,并放置new
- 使用整数初始化列表初始化长双精度的向量
- 直接列表初始化的自动规则
- 使用初始化列表初始化unique_ptr的容器,继续
- 如何修复"非聚合无法使用初始值设定项列表初始化" <map>
- 直接列表初始化和复制列表初始化之间的差异
- 为什么我可以在不使用赋值运算符的情况下使用列表初始化普通数组
- C++ - 使用类中的初始值设定项列表初始化动态集