C++ 如何在c++;? 这越来越烦人了
我花了足够长的时间试图解决这个问题,但我不得不问你如何解决这个问题,因为我已经没有任何想法了C++ 如何在c++;? 这越来越烦人了,c++,initialization,declaration,C++,Initialization,Declaration,我花了足够长的时间试图解决这个问题,但我不得不问你如何解决这个问题,因为我已经没有任何想法了 #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
#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);
}
#包括
#包括
使用名称空间std;
无效添加(常量整数和数字,…)
{
双和=0.0;
va_列表;
va_开始(列表、编号);
for(int i=0;i cout在您的版本中,您应该首先将参数数作为整数值传递,然后传递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);
}
在您的版本中,您应该首先将参数数作为整数值传递,然后传递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);
}
这是否回答了您的问题?主要问题是您使用两个整数值调用add
函数。更具体地说,是两个int
值。我不知道有哪个系统sizeof(int)==sizeof(double)
,这意味着您将在添加
功能中有未定义的行为。在此处使用之前,列表
不会进行复制。在va_end(liste)中有输入错误;
但是传递的参数和类型与提取的值不匹配。这回答了您的问题吗?主要问题是您使用两个整数值调用add
函数。更具体地说,是两个int
值。我不知道任何系统sizeof(int)==sizeof(double)
,这意味着您将在add
函数中有未定义的行为。在此处使用之前,list
不会进行复制,而是在这里进行初始化(或填充)。尽管va_end(liste);
中存在键入错误,并且传递的参数类型与提取的值不匹配。