gpt4 book ai didi

c++ - 遍历std::initializer_list

转载 作者:行者123 更新时间:2023-12-01 15:10:54 26 4
gpt4 key购买 nike

//parameter pack sum example

constexpr int sum(int N= 0)
{
return N;
}
template<typename ...Args>
constexpr int sum(int first, int second, Args ...N)
{
return first + second + sum(N...);
}

int main()
{
std::cout << sum<int>(1,6,3);
}

是否可以使用 std::initializer_list<int>在编译时求和,我如何通过它进行递归迭代。

最佳答案

在C++ 11中,可以通过以下方式将sumstd::initializer_list结合使用:

template <typename It>
constexpr int sum(It it, It end)
{
return it == end ? 0 : (*it + sum(it + 1, end));
}

constexpr int sum(std::initializer_list<int> ini)
{
return sum(ini.begin(), ini.end());
}

static_assert(sum({1, 2, 3, 4, 5})== 15, "!");

Demo

C++ 14允许在 constexpr函数中循环,从而摆脱递归:
constexpr int sum(std::initializer_list<int> ini)
{
int res = 0;
for (int e : ini) {
res += e;
}
return res;
}

在C++ 20中, std::accumulate被标记为constexpr,从而允许
constexpr int sum(std::initializer_list<int> ini)
{
return accumulate(ini.begin(), ini.end(), 0);
}

关于c++ - 遍历std::initializer_list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60429994/

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