gpt4 book ai didi

c++ - 模板类型推导中的隐式转换

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

在此question OP 询问为什么他的 std::accumulate 函数返回错误值。答案是因为他传入了一个 int 作为他的初始值,因此计算全部是 int 而不是 double。我有两个版本:

template <class InputIterator, class T>
auto accumulate (InputIterator first, InputIterator last, T init)
{
typedef typename std::iterator_traits<InputIterator>::value_type vt;
vt init2 = vt(init);
// ...
return init2;
}

template <class InputIterator, class T = typename std::iterator_traits<InputIterator>::value_type>
T not_working (InputIterator first, InputIterator last, T init)
{
// ...
return init;
}

为什么在版本 2 中 T 仍然是 int?因为隐式转换?

最佳答案

T 仍在推导中,覆盖默认参数。 :)

你想要这个:

template <class InputIterator>
typename std::iterator_traits<InputIterator>::value_type
working(InputIterator first, InputIterator last,
typename std::iterator_traits<InputIterator>::value_type init) {
return init;
}

关于c++ - 模板类型推导中的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20736226/

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