gpt4 book ai didi

c++ - std::accumulate 的第三个参数的充分理由?

转载 作者:可可西里 更新时间:2023-11-01 18:32:49 26 4
gpt4 key购买 nike

我刚刚写了一个小的辅助函数作为 std::accumulate 的包装:

template <typename FwdIter> inline
auto accumulate(FwdIter begin, FwdIter end) -> std::iterator_traits<FwdIter>::value_type
{
return std::accumulate(begin, end, std::iterator_traits<FwdIter>::value_type());
}

我可能忽略了这里的一些东西。为什么这不是 std::accumulate 的现有重载?功能如此明显,不容忽视;有人有充分的理由强制要求第三个参数。

(另见 Understanding std::accumulate - 我明白你为什么想要提供初始值的能力,我只是不明白为什么它是强制性的)

最佳答案

这样就可以推导出模板参数。

声明是

template< class InputIt, class T >
T accumulate( InputIt first, InputIt last, T init );

从中推导出返回值的唯一参数是init .因为它必须是迭代器的值类型。

是的,它仍然默认std::iterator_traits<InputIt>::value_type() .委员会可能根本没有想到这一点。

PS:你把我和汽车搞混了。我认为它没有被添加,因为它在 C++03 中是不可能的,并且在 C++11 完成时被忽略了,因为它看起来不需要任何更改。但这里不需要;模板参数是在您在标准位置写入返回类型时声明的。

关于c++ - std::accumulate 的第三个参数的充分理由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18694350/

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