zoukankan      html  css  js  c++  java
  • lambda函数

    构造一个闭包:一个能在作用域内捕捉变量 的匿名函数对象。

    语法

    [capture](params) mutable exception attribute -> ret{body},完整的声明

    [capture](params) -> ret {body},一个常lambda声明:按副本捕捉的对象不能被修改

    [capture](params){body},省略后缀返回值类型:

      闭包的operator()的返回值类型是根据一下规则推到的:

        如果body仅含有单一的return语句,那么返回值类型是返回表达式的类型(隐式转换之后的类型:右值到左值、数组到指针、函数到指针)

        否则,返回类型是void

    [capture]{body}

      省略参数列表:函数没有参数,即参数是()

    ====================

    mutable--允许body修改传值进来的形参,以及调用他们的非const成员函数

    exception--提供闭包类型的operator()成员函数的异常说明或noexcept语句

    attribute--提供闭包类型的operator()成员函数的属性说明

    capture--指定哪些在函数声明处的作用域可见到的符号 将在函数体内可见

      符号表可按如下规则传入:

        [a,&b]按值捕获a,并按引用捕获b

        [this] 按值捕获了this指针

        [&] 按引用 捕获 lambda表达式所在函数的函数体中  所有的外部变量

        [=] 按值 捕获在lambda表达式所在函数的函数体中提及的   所有外部变量

        []什么也不捕获

    params--参数列表,与命名函数一样

    ret--返回值类型,如果不存在,由该函数return语句来隐式决定(或void,当它不凡会任何值的时候)

    body--函数体

    =================

    来自http://my.oschina.net/wangxuanyihaha/blog/18315

    lambda表达式用于创建并定义匿名的函数对象,来简化编程工作。

    简化的语法可以看作,

    [函数对象参数] (操作符重载函数参数) ->返回值类型 {函数体}

    vector<int> iv{5, 4, 3, 2, 1};
    int a = 2, b = 1;
    
    for_each(iv.begin(), iv.end(), [b](int &x){cout<<(x + b)<<endl;}); // (1)
    
    for_each(iv.begin(), iv.end(), [=](int &x){x *= (a + b);});        // (2)
    
    for_each(iv.begin(), iv.end(), [=](int &x)->int{return x * (a + b);});// (3)
    • []内的参数指的是lambda表达式可以取得的全局变量,1函数中的b就是指函数可以得到lambda表达式外的全局变量,如果在[]中传入=的话,就是可以取得所有的外部变量,如果2和3中的lambda表达式
    • ()内的参数每次调用函数时传入的参数
    • ->后加上的是lambda表达式返回值的类型,如3返回了int类型的变量。
  • 相关阅读:
    字符串 CSV解析 表格 逗号分隔值 通讯录 电话簿 MD
    Context Application 使用总结 MD
    RxJava RxPermissions 动态权限 简介 原理 案例 MD
    Luban 鲁班 图片压缩 MD
    FileProvider N 7.0 升级 安装APK 选择文件 拍照 临时权限 MD
    组件化 得到 DDComponent JIMU 模块 插件 MD
    gradlew 命令行 build 调试 构建错误 Manifest merger failed MD
    protobuf Protocol Buffers 简介 案例 MD
    ORM数据库框架 SQLite 常用数据库框架比较 MD
    [工具配置]requirejs 多页面,多入口js文件打包总结
  • 原文地址:https://www.cnblogs.com/li-daphne/p/5546083.html
Copyright © 2011-2022 走看看