c++ - 可变参数函数声明 VS 使用列表的函数

标签 c++ variadic-functions function-parameter stdlist

在设计类或函数时,哪种方式(如下所示)更好,为什么?

class Container {

    //Provide this functionality??
    void addItemVariadic(const Value& val, ...);

    //Or provide this functionality??
    void addItemList(const list<Value>& vals);

};

提供像 addItemVariadic(..) 或 addItemList(..) 这样的函数更好吗?

或者是提供一组这样的函数更好,比如进一步采用一些迭代器,还是限制功能更好,比如只采用一个列表?

最佳答案

使用可变参数函数危险

如果您传递的变量没有适当的类型,那么在调用函数时,它将在运行时崩溃。

相反,如果您使用 std::list,它不会简单地编译,并且可以避免崩溃。

顺便说一句:在这种情况下,我建议您使用 std::vector 而不是 std::list

编辑1 Possible Dupplicate Question. 一个很好的解决方案,使用运算符<<一次性输入所有参数。

Edit2 为了在不同的 std::containers 之间进行选择,有一个选择图作为 this question 的答案。该图针对 C++03,不包括 C++1 中引入的新容器。

关于c++ - 可变参数函数声明 VS 使用列表的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14398992/

相关文章:

c++ - 从数组中向量化提取特定模式的短裤,并插入到新数组中

c++ - 什么是与 Codeblocks C++ 项目一起使用的好 gitignore?

scala:如何将扩展列表作为可变参数传递到方法中?

function - 如何验证 Perl 中的函数参数?

C++::Template 函数 - 从 object.function 获取对象的地址

c++ - "const"应该在语义上还是在句法上使用?

java - 这会导致可变参数造成堆污染吗?

c - vsnprintf 和 NULL 输入字符串参数

c++ - 在 C++ 中将函数作为参数传递

c++ - 如何避免从整数 0 到指针的隐式转换,作为 vector 的元素