赞printf
?
但是我记得C ++确实使用函数名和参数类型进行了命名,
这可以推断出C ++不支持可变长度参数......
我只是想确定,是这样吗?
更新
讨论应排除extern "C"
答案 0 :(得分:6)
是。 C ++从C继承了这个。你可以写:
void f(...);
此函数可以使用任何类型的任意数量的参数。但那不是很C ++风格。程序员通常会避免这种编码。
然而,有一个例外:在模板编程中,SFINAE充分利用了这一点。例如,请参阅此内容(摘自here):
template <typename T>
struct has_typedef_type {
// Variables "yes" and "no" are guaranteed to have different sizes,
// specifically sizeof(yes) == 1 and sizeof(no) == 2.
typedef char yes[1];
typedef char no[2];
template <typename C>
static yes& test(typename C::type*);
template <typename>
static no& test(...);
// If the "sizeof" the result of calling test<T>(0)
// would be equal to the sizeof(yes), the first overload worked
// and T has a nested type named type.
static const bool value = sizeof(test<T>(0)) == sizeof(yes);
};
这使用test(...)
这是一个可变函数。
答案 1 :(得分:4)
是的,C ++支持C语言的省略号,但我强烈反对使用它们,因为它们绝不是类型安全的。
如果您可以访问具有可变参数模板支持的C ++ 11编译器,那么您应该使用它。如果你没有,请看看boost :: format如何解决这些问题。