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

    匿名函数

    • 声明格式

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

    capture list

    捕获外部变量列表,在Lambda表达式的可见范围内的可见外部变量,如果Lambda函数想要访问他,就必须在capture list里声明,多个外部变量用,分割

    int a = 10, b=20;
    cout << [a] () {return a;}() ;                  //输出10
    
    //如果想返回a+b的值
    //第一种方法
    cout << [a,b] {return a+b;}(); //没有参数、mutable、exception、-> 、return type的时候,形参的括号可以省略
    //第二种方法
    cout << [=] {return a+b;}(); 
    //懒得写捕获参数列表时或者需要捕获的太多,就用[=]来声明所有外部可见变量
    //这两种方法是值传递
    
    //如果想修改 外部变量 a和b 的值呢?
    //第一种方法
    [&a, &b]{a=0, b=0;}();
    //第二种方法
    [&] {a=0,b=0;}();
    //以上两种方法都是引用传递
    

    params list

    参数列表

    1. 不能有默认参数
    2. 不支持可变参数
    3. 所有参数必须有参数名

    mutable

    当捕获列表是值传递的时候,这个值是const,若想在函数体内修改,必须加mutable修饰符

    int a=10;
    
    [=]() mutable {a=20; cout << a;}();
    //由于是值传递,所以外部的a值不变
    

    异常说明

    没学异常,日后再补

    返回类型

    可省略, 由return语句决定;

  • 相关阅读:
    Java8 Stream
    一个轻量级的基于RateLimiter的分布式限流实现
    常用限流算法与Guava RateLimiter源码解析
    Java学习之socket网络编程篇
    Java学习之文件io流篇
    Java学习之异常篇
    Java学习之多线程篇
    Java学习之集合篇
    Java学习之常用类篇
    Java学习之final与匿名内部类篇
  • 原文地址:https://www.cnblogs.com/rookiezjz/p/12347678.html
Copyright © 2011-2022 走看看