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

    C++中的lambda函数

    lambda函数是函数式编程中的概念,由C++11引入,成为现代C++中重要的特性。
    所谓lambda函数就是匿名函数,语法结构:

    [capture list] (params) mutable noexcept -> return type { body }
    
    • capture list : 捕获列表
    • params : 参数列表
    • mutable : 是否能更改按值捕获的变量
    • noexcept : 是否抛出异常
    • -> return type : 返回类型
    • body : 函数体

    这里面必须存在的只有捕获列表和函数体[capture list] { body }

    基本概念

    lambda函数在C++中也叫lambda表达式,由lambda表达式生成的对象叫做闭包(closure)。
    C++是用仿函数类来实现lambda函数的,所以每一个lambda函数其实对应了一个闭包类

    为什么需要mutable关键字

    刚才说lambda函数其实对应了一个闭包类,但是它的调用接口默认是const的,所以需要显式加上mutable关键字。

    捕获this

    lambda函数只能捕获局部非静态变量,所以在类的成员函数中捕获时,无法直接捕获成员变量,但是可以捕获this:[this] (params) { body }

    init capture

    C++14引入了新的捕获模式,那就是init capture,可以用移动语义捕获,并且可以直接捕获成员变量,比如对于移动语义捕获:

    [up = std::make_unique()] (params) { body }
    

    在C++中,只有自己写仿函数类,或者使用bind函数来模拟这一语法。

  • 相关阅读:
    组件GIS 0 前言
    GIS数据结构与算法
    GIS数据结构与算法 0 前言
    Git推送本地工程到远程仓库
    为知笔记+Typora+PicGo发表博客园博客
    时间记录"时间块"的使用技巧
    WebGIS学习路线
    [c++指针教程]用简单链表练习指针
    动态规划题目整理
    图论刷题整理
  • 原文地址:https://www.cnblogs.com/HachikoT/p/12609894.html
Copyright © 2011-2022 走看看