gpt4 book ai didi

c++ - 将可变长度参数传递给函数 C++

转载 作者:行者123 更新时间:2023-11-30 05:06:11 38 4
gpt4 key购买 nike

我正在尝试创建一个接受可变数量参数的函数。但是我在表达式 decltype(std::initializer_list::size_type) res1=0; 中遇到错误,因为 error: expected primary-expression before 'decltype'。目的是声明可以保存列表总和的适当变量类型(尽管此声明将创建足够大的变量以仅保存列表的所有元素而不是它们的总和)。我该怎么做?

另外,我怎样才能使适当的函数返回类型返回 res1 而不是 void

#include <iostream>
#include <initializer_list>

void sum1(std::initializer_list<int> lst1)
{
decltype(std::initializer_list::size_type) res1=0;
for(auto v1:lst1)
{
res1 += v1;
}
std::cout<<" sum = \n"<<res1;
}
int main()
{
sum1({1,2,3,4,5,6,7,8,9,10});
//auto b = sum1({1,2,3,4,5,6,7,8,9,10});
return 0;
}

最佳答案

size_type 对于您的函数中的任何内容都不需要。 initializer_list 的类型为 int,因此 res1 应该是 int 并且您的返回类型应该是 int 。如果你真的想从 initializer_list 派生值类型,那么这样做:

#include <iostream>
#include <initializer_list>

auto sum1(std::initializer_list<int> lst1)
{
typename std::initializer_list<int>::value_type res1 = 0;
for(auto v1:lst1)
{
res1 += v1;
}

return res1;
}

int main()
{
sum1({1,2,3,4,5,6,7,8,9,10});
auto b = sum1({1,2,3,4,5,6,7,8,9,10});
std::cout << b << std::endl;
return 0;
}

如果你希望函数是泛型的,在这种情况下需要派生值类型,那么模板函数如下所示。

#include <iostream>
#include <initializer_list>

template<typename T>
auto sum1(std::initializer_list<T> lst1)
{
typename std::initializer_list<T>::value_type res1 = 0;
for(auto v1:lst1)
{
res1 += v1;
}

return res1;
}

int main()
{
sum1({1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.10});
auto b = sum1({1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.10});
std::cout << b << std::endl;
return 0;
}

关于c++ - 将可变长度参数传递给函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48039467/

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