具有可变参数的函数

sam*_*ami 3 c++

如果我想使用该功能,我可以有哪些缺点

foo(int num, ...)
Run Code Online (Sandbox Code Playgroud)

实现可变数量的参数?

我知道你只能使用一种数据类型的第一个缺点.

还有其他办法吗?

Jon*_*ler 7

您不限于一种数据类型的参数; 所述printf()的功能C(和C++)家族掩饰该传言.

省略号表示法的主要缺点是你失去了类型安全性; 当您使用错误类型的参数时,编译器无法告诉您.(Go编程语言允许您指定函数采用单个类型的任意数量的参数 - 这是一个有趣的想法.)

在函数内部,必须有一些方法来告诉它提供了多少参数以及类型是什么.printf()再次引用,格式字符串告诉它预期的其他参数.现代编译器知道这些格式字符串,并且可以检查给定的参数是否与格式字符串匹配(当格式字符串是文字时).这毕竟允许某种类型的安全 - 但是你无法使用它.使用计数是处理它的一种方法 - 但是你想知道为什么你没有使用vector<T>类似的东西来传递数据.另一种经典的方法是在结尾处有一个标记值 - 通常是空指针 -输入清单.

因此,您通常不需要可变参数列表.当你使用一个时,你通常会让自己开放出错以避免其他机制.