• lamba: lamba变量申明


    1,下面编译运行没问题

    #include <iostream>  
    #include <unordered_map>
    #include <functional>
    using namespace std;
    
    
    void solve() {
        int x=100;
    
        typedef int (*MyType)(int i);
    
        MyType f= [](int i) {
            return 10 - i - 1;
        };
    
        cout<<f(10);
    }
    
    int main() {
        solve();
        return 0;
    }

    2,如果想在lamba中引用外围变量x,是无法做到的,如下会报错,类型不匹配了

    #include <iostream>  
    #include <unordered_map>
    #include <functional>
    using namespace std;
    
    
    void solve() {
        int x=100;
    
        typedef int (*MyType)(int i);
    
        MyType f = [x](int i) {
            return x - i - 1;
        };
    
        cout<<f(10);
    }
    
    int main() {
        solve();
        return 0;
    }

     error C2440: “初始化”: 无法从“solve::<lambda_1>”转换为“MyType”

    用 std::function强制转换,改成这样就可以了

    #include <iostream>  
    #include <unordered_map>
    #include <functional>
    using namespace std;
    
    
    void solve() {
        int x=100;
    
        //typedef int (*MyType)(int i);
    
        function<int(int)> f = [x](int i) {
            return x - i - 1;
        };
    
        cout<<f(10);
    }
    
    int main() {
        solve();
        return 0;
    }

    4,但是如果还想用:

    typedef int (*MyType)(int i);
    那就没办法了。只能在接口中加一个void*指针,将x传进去。
  • 相关阅读:
    生成函数
    泰勒公式与牛顿迭代
    如何在浏览器关闭发送请求
    elment-ui table组件 -- 远程筛选排序
    微信小程序 -- 数据请求
    2019年 学习计划
    vue 表单校验(二)
    ubuntu 学习
    vue-cli如何添加多种环境变量
    vue兼容ie
  • 原文地址:https://www.cnblogs.com/bigben0123/p/16342974.html
Copyright © 2020-2023  润新知