【问题标题】:lambda parameter deduced incorrect导出的 lambda 参数不正确
【发布时间】:2017-06-06 08:33:04
【问题描述】:

为什么在 C++14 甚至 C++17 下这段代码不正确?

template <typename T>
function<T(T, T)> ReturnLambda () {
    return [] (T x, T y) { return x*y; };
    // return [] (auto x, auto y) { return x*y; };    // also incorrect
}


int main() {
    auto f = ReturnLambda();
    cout << f(3, 4) << endl;

}

【问题讨论】:

    标签: c++ lambda c++14 c++17


    【解决方案1】:

    Template argument deduction 仅适用于函数参数,而 ReturnLambda() 没有任何这些;调用ReturnLambda() 时无法推断出模板参数T;您必须明确指定它。例如

    auto f = ReturnLambda<int>();
    

    【讨论】:

    • 能详细解释一下吗?
    • 语句 `auto f = ReturnLambda();` 没有足够的信息让编译器知道 T 是什么类型。
    • @fetag 答案已修改;如果您对模板参数推导有问题,您可能需要参考我发布的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    相关资源
    最近更新 更多