如何在 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);
}

这是一个类型安全的解决方案,即使您混合使用 ints 和 doubles:

#include <iostream>

template <typename... Args>
void add(Args... args)
{
  std::cout << (args + ...) << '\n';
}

int main()
{
    add(25.0, 25, 25.0, 25);
}