作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在此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/
我是一名优秀的程序员,十分优秀!