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语句决定;

  • 相关阅读:
    同余方程(codevs 1200)
    Number Sequence(poj 1019)
    Paths on a Grid(poj 1942)
    取余运算(codevs 1497)
    火车站(codevs 2287)
    教官的游戏(codevs 2793)
    转圈游戏(codevs 3285)
    Code(poj 1850)
    菜菜买气球(codevs 2851)
    3Sum
  • 原文地址:https://www.cnblogs.com/rookiezjz/p/12347678.html
Copyright © 2011-2022 走看看