我对 C++ 中可变数量的参数有疑问。我使用 Xcode 编写代码。
这是我的代码:
#include <iostream>
int sum(int n, ...)
{
int *p = &n;
p++;
int res = 0;
for(int i=0; i<n; i++){
res+=(*p);
p++;
}
return res;
}
int main(int argc, const char * argv[]) {
std::cout << sum(4, 1, 2, 3, 4);
return 0;
}
sum(4, 1, 2, 3, 4)
应该返回值 10,但它返回 1606452732。
最佳答案
在 C++ 中,您使用模板元函数来执行此操作。这非常简单:
int sum(int u)
{return u;} // Recursion-End
template<typename... Args>
int sum(int u, Args... rest)
{
return u + sum(rest...);
}
试一试 online !
但是,正如我所认为的,使用 va_start
和 va_end
的折旧 C 方式。您需要包含 cstdarg
并且在函数调用中您需要提供参数总数。它看起来像这样:
int sum(int argnum, ...)
{
va_list arguments;
int i;
int sum = 0;
va_start(arguments, argnum); /* Needs last known character to calculate
the address of the other parameters */
for(i = 0; i < argnum; ++i)
sum += va_arg(arguments, int); /* use next argument */
va_end(arguments);
return sum;
}
试一试 online !
关于c++ - C++ [Xcode] 中可变数量的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29721749/