gpt4 book ai didi

c++ - 可变参数列表 : use va_list or address of formal parameter?

转载 作者:搜寻专家 更新时间:2023-10-31 00:38:18 28 4
gpt4 key购买 nike

下面的代码包含 2 个函数,它们都计算提供的整数值列表的总和:

#include <iostream>
#include <stdarg.h>

using namespace std;

int sum_1 ( int number_of_values, ... )
{
va_list arguments;
va_start ( arguments, number_of_values );
int sum = 0;
for ( int i = 0; i < number_of_values; i++ )
{
sum += va_arg ( arguments, int );
}
va_end ( arguments );

return sum;
}

int sum_2 ( int number_of_values ...)
{
int sum = 0;
for ( int i = 0; i < number_of_values; i++ )
sum += *( &number_of_values + i + 1 );
return sum;
}


int main()
{
cout << sum_1(3, 1, 2, 3) << endl; //prints 6
cout << sum_2(3, 1, 2, 3) << endl; //prints 6
}

sum_1 使用 va_list 方法,sum_2 使用提供的 number_of_values 变量的地址,相对于它找到其他值并将它们相加。

那么这两种方法有什么区别呢?使用哪一个?第二个看起来更短,那么定义 va_listva_startva_artva_end 有什么用呢?

最佳答案

第二个版本不可移植,这是使用第一个版本的有力论据。

第二个版本只有在您的平台上以特定方式在堆栈上布置函数的参数时才有效。 varargs 的使用抽象了它,这就是使第一个版本可移植的原因。

关于c++ - 可变参数列表 : use va_list or address of formal parameter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18336602/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com