В вашей версии вы должны сначала передать число аргументов как целочисленное значение, а затем передать 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
с и double
с:
#include <iostream>
template <typename... Args>
void add(Args... args)
{
std::cout << (args + ...) << '\n';
}
int main()
{
add(25.0, 25, 25.0, 25);
}