使用auto和decltype来实现实参推断时,遇到下面case:
template<typename Iter>
auto sum(Iter begin, Iter end)->decltype(*begin) {
//decltype(*begin) ret = *begin;
auto ret = *begin;
for (Iter it = begin + 1; it < end; ++it) {
ret += *it;
}
//cout << typeid(ret).name() << " " << ret << endl;
return ret;
}
int main() {
vector<int> vec = {5, 2, 3, 4};
auto s = sum(vec.begin(), vec.end());
cout << s << endl;
return 0;
}
执行结果为:
0
如果把sum中的注释的cout打开,输出结果为:
14
在sum函数中,只要在return ret
之前调用一次ret,就能得到理想的结果,原因未知。
网友评论