如何在 C++ 中初始化 va_list 对象?
How to initialize a va_list object in c++?
这越来越烦人了
我已经花了足够长的时间来解决这个问题,但我不得不问你如何解决这个问题,因为我已经没有想法了。
#include <iostream>
#include <cstdarg>
using namespace std;
void add(const int &number, ...)
{
double sum = 0.0;
va_list list;
va_start(list, number);
for (int i = 0; i < number; i++)
sum += va_arg(list, double);
va_end(liste);
cout << "Sum: " << sum << endl;
}
int main()
{
add(12, 12);
}
这是我的代码。我得到错误,list
未初始化,我得到错误,va_start
参数不能有引用类型,也不能用括号括起来。请帮忙
在您的版本中,您应该首先将参数数量作为整数值传递,然后传递 double
值(因为您将它们解释为 double
)。在您的示例中传递 int
并解释为 double
会导致未定义的行为。这是固定版本:
#include <iostream>
#include <cstdarg>
void add(int count, ...)
{
double sum = 0.0;
std::va_list args;
va_start(args, count);
for (int i = 0; i < count; ++i) {
sum += va_arg(args, double);
}
va_end(args);
std::cout << sum << '\n';
}
int main()
{
add(4, 25.0, 25.0, 25.0, 25.0);
}
这是一个类型安全的解决方案,即使您混合使用 int
s 和 double
s:
#include <iostream>
template <typename... Args>
void add(Args... args)
{
std::cout << (args + ...) << '\n';
}
int main()
{
add(25.0, 25, 25.0, 25);
}
这越来越烦人了
我已经花了足够长的时间来解决这个问题,但我不得不问你如何解决这个问题,因为我已经没有想法了。
#include <iostream>
#include <cstdarg>
using namespace std;
void add(const int &number, ...)
{
double sum = 0.0;
va_list list;
va_start(list, number);
for (int i = 0; i < number; i++)
sum += va_arg(list, double);
va_end(liste);
cout << "Sum: " << sum << endl;
}
int main()
{
add(12, 12);
}
这是我的代码。我得到错误,list
未初始化,我得到错误,va_start
参数不能有引用类型,也不能用括号括起来。请帮忙
在您的版本中,您应该首先将参数数量作为整数值传递,然后传递 double
值(因为您将它们解释为 double
)。在您的示例中传递 int
并解释为 double
会导致未定义的行为。这是固定版本:
#include <iostream>
#include <cstdarg>
void add(int count, ...)
{
double sum = 0.0;
std::va_list args;
va_start(args, count);
for (int i = 0; i < count; ++i) {
sum += va_arg(args, double);
}
va_end(args);
std::cout << sum << '\n';
}
int main()
{
add(4, 25.0, 25.0, 25.0, 25.0);
}
这是一个类型安全的解决方案,即使您混合使用 int
s 和 double
s:
#include <iostream>
template <typename... Args>
void add(Args... args)
{
std::cout << (args + ...) << '\n';
}
int main()
{
add(25.0, 25, 25.0, 25);
}