C++ 中可变数量的参数 [Xcode]
Variable number of arguments in C++ [Xcode]
我对 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)
应该 return 值为 10,但它 returns 1606452732.
发件人:http://en.cppreference.com/w/cpp/utility/variadic/va_start
#include <iostream>
#include <cstdarg>
int add_nums(int count, ...)
{
int result = 0;
va_list args;
va_start(args, count);
for (int i = 0; i < count; ++i) {
result += va_arg(args, int);
}
va_end(args);
return result;
}
int main()
{
std::cout << add_nums(4, 25, 25, 50, 50) << '\n';
return 0;
}
在 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++ 中可变数量的参数有疑问。我使用 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)
应该 return 值为 10,但它 returns 1606452732.
发件人:http://en.cppreference.com/w/cpp/utility/variadic/va_start
#include <iostream>
#include <cstdarg>
int add_nums(int count, ...)
{
int result = 0;
va_list args;
va_start(args, count);
for (int i = 0; i < count; ++i) {
result += va_arg(args, int);
}
va_end(args);
return result;
}
int main()
{
std::cout << add_nums(4, 25, 25, 50, 50) << '\n';
return 0;
}
在 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!