auto & decltype

使用auto和decltype来实现实参推断时,遇到下面case:

template
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 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,就能得到理想的结果,原因未知。

你可能感兴趣的:(auto & decltype)