我试图实现一个返回传递给它的参数数量的函数。这是代码:
int SIZE(int n, ...){
va_list ARGS;
va_start (ARGS, n);
int length(0);
void* current_arg;
do{
current_arg=va_arg(ARGS, void*);
length++;
}while( current_arg != nullptr);
va_end(ARGS);
return length;
}
我之前做过一些研究,所以我知道它不会起作用。事实上它没有:当我向它传递两个参数时,它返回了 12 ! 我仍然想了解为什么它不起作用。我看到两个选项:
我设计算法的方式有问题,导致它出现故障。
函数接受的参数比显式提供给它的参数多得多。
我编程的时间不长,所以我喜欢尝试这类东西。 你能帮我弄清楚我的功能有什么问题吗? 谢谢
最佳答案
既然你标记了 C++11,你应该考虑 parameter packs制作你的功能:
template<typename... T>
constexpr unsigned numberOfArguments(const T&... args)
{
return sizeof...(T);
}
正如在主帖的评论中所见,sizeof...()
运算符在这种情况下将返回模板参数包的大小。
关于c++ - 返回传递给它的参数数量的可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50179166/