zoukankan      html  css  js  c++  java
  • lambda表达式

    C++实现匿名函数这个东西可以通过lambda表达式这个高端大气上档次的东西。

    那lambda函数是个什么鬼呢?简单介绍一下:

    先看下完整的表达式声明

    [capture list] (params list) mutable exception-> return type { function body }

    capture list:捕获外部变量列表(匿名函数体外的变量)

    params list:参数列表

    mutable exception:捕获到的变量是否可以在表达式内修改

    return type:返回值类型

    function body:函数体

    个人感觉就是这个捕获列表和以前我们声明和定义函数有点不一样。在这里,我们可以把捕获列表里面的东西,当做是在调用普通函数时的实参。

    一般常用的方式如下:

    int main()
    {
        int a = 1;
    //无返回值,不捕获外部变量 auto lambdas_a = [](int x) { std::cout << x << std::endl; }; //使用值捕获方式,捕获外部a变量 auto lambdas_b = [a]() { std::cout << a << std::endl; }; //使用引用捕获方式,捕获外部a变量 auto lambdas_c = [&a]() { std::cout << a << std::endl; }; //使用隐式值捕获,通过函数体代码推断不活的外部参数,这里推断出捕获参数为外部的a变量 auto lambdas_d = [=]() { std::cout << a << std::endl; }; //使用隐式引用捕获方式,具体操作和上面差不多 auto lambdas_e = [&]() { std::cout << a << std::endl; }; //使用mutable表示捕获到的外部变量可在函数体中进行更改 auto lambdas_f = [=]()mutable { a++; std::cout << a << std::endl; }; //返回值类型为int auto lambdas_g = [](int x)->int { return x; }; return 0; }

    建议最好不要使用隐式捕获,显示捕获更易阅读。

    大概就这么样,以后慢慢补充。

    以上为个人愚见,欢迎指正。

  • 相关阅读:
    VSS部署手册
    正则表达式学习(二)
    完全卸载oracle11g步骤
    c#中 命令copy 已退出,返回值为1
    Windows 64位下装Oracle 11g,PLSQL Developer的配置问题,数据库处显示为空白的解决方案
    ora01033和ora12560错误的解决方案
    C#DLL加密保护
    ocslive.conf
    ASP.NET中文乱码问题的解决
    Creating a very simple autorestore USB stick clonezilla
  • 原文地址:https://www.cnblogs.com/TinyGreen/p/8359909.html
Copyright © 2011-2022 走看看