【发布时间】:2010-10-16 06:33:25
【问题描述】:
为什么std::list<T> 的单参数构造函数要求T 是默认可构造类型?我的意思是以下代码无法编译。
struct Foo { // does not have default constructor.
Foo (int i) {}
}
int main(void) {
std::list<Foo> l(10);
}
似乎可以使用construct and destroy idioms,就像他们已经在 std::vector 中所做的那样,尽管列表类有更多的簿记。
在相关说明中,为什么列表中没有容量功能?您可以争辩说,这样的功能会预先支付内存分配成本并在以后消除开销,因为您 push_back 对象。至少会让两个STL序列容器的接口稍微一致。
【问题讨论】:
-
std::vector 没有这样的限制。我的问题是为什么不在 std::list 中也使用相同的技术(创建/销毁习语)?
-
为什么你删除了对我的回答的评论?
-
我的评论有误。我不希望错误的信息四处飘荡。
-
对于没有默认构造函数的类,可以将两个参数传递给列表和向量构造函数。原型实例作为第二个参数给出,它被克隆(使用复制构造函数)的次数与第一个参数一样多。如果您不提供原型实例,则剩下的唯一选项是默认构造函数。请参阅cplusplus.com/reference/stl/vector/vector 和 cplusplus.com/reference/stl/list/list 和 punchlet.wordpress.com/2009/12/03/letter-the-third/#comments
标签: c++ list stl default-constructor