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

    1.基本概念

      lambda表达式是一种在被调用位置定义匿名函数对象的方法。lambda(λ)也就是指匿名函数。它在C++11中开始支持。在98/03标准中不支持,但是可以通过Boost库的Boost.Lambda来实现匿名函数。

      通常如果需要一个函数,但是又不想去命名一个函数,这时候可以使用lambda。

    2.语法格式

      ①. capture,捕获,在规范中称为lambda引导,可以捕获周围的变量。可以指定是通过 值 或 引用 来

        进行捕获,通过加前缀 & 来进行引用捕获,不加前缀则通过值捕获。以下是捕获格式:

    []     //不捕获任何变量
    [=]    //通过值捕获周围所有变量
    [&]    //通过引用捕获周围所有变量
    [&,b]  //通过引用捕获周围所有变量,但变量b是通过值捕获,不包含在内
    [&a,b] //通过引用捕获a,通过值捕获b,其他的不捕获
    [=,&b] //通过值捕获周围所有变量,但变量b是通过引用捕获,不包含在内

      ②.参数列表,可选,也称作lambda声明符,限制:

       不能有缺省值、不能有可变长参数列表、不能有无名参数

       如果没有参数并且没有mutable、exception或attribute声明,则参数括号()可省略

      ③.修饰符,可选,加上mutable修饰符后,可以修改按值传递进来的拷贝(不是值本身)

      ④.异常规范,可选

      ⑤.返回值类型 ->,当返回值为void,或函数体内只有一处return时(由编译器推断返回值类型),可省略

      ⑥.函数体,可为空,不可省略

    3.示例程序

    #include <iostream>
    using namespace std;
    int main()
    {
        
        int m = 1; int n = 2;
        auto z = [&](int x, int y)->int{m = x + y; return 0; }; // 通过引用传递捕获所有该区域的变量
        z(2, 3);
        cout << m<<endl;
            
    }

      

      

    ------------ 转载请注明出处 ------------
  • 相关阅读:
    vue——样式穿透/deep/ >>> ::v-deep 三者的区别
    CSS Grid 网格布局教程
    CSS3中的display:grid网格布局介绍
    windows 好用的命令
    django分页
    django.template.exceptions.TemplateSyntaxError: 'staticfiles' is not a registered tag library. Must
    bootstrap模板
    django报错 django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.0 or newer is required; you have 0.10.1
    bootstrapV4.4.1版本下载
    Dots demo解释相关
  • 原文地址:https://www.cnblogs.com/whlook/p/6478502.html
Copyright © 2011-2022 走看看