首页 > 编程语言 >c++ lambda表达式

c++ lambda表达式

时间:2024-03-07 20:33:59浏览次数:28  
标签:return int auto 捕获 c++ 作用域 表达式 lambda

引入

lambda表达式也有人称之为匿名函数,能够在任何作用域下快速定义一个函数

下面这行代码就是一个最简单的lambda表达式,最后输出为3

auto f = [](int x , int y)->int{return x+y;};
cout<<f(1,2);

我们来解析一下lambda表达式

auto f = [](int x , int y)->int{return x+y;};

//[] : 捕获列表,当前为空表示不捕获外围的变量
//(int x , int y): 参数列表。在c++14中可以用auto自动推测参数的类型
//->int : 返回值类型为int,编译器能根据返回值自动推测返回值类型所以可省略
//{return x+y} : 作用域,也是函数的主体

捕获列表

int main()
{
    int n = 10,m = 100;
    auto f = [n , &m](auto x) //n是按值捕获,此时n是只读的(read-only)不可修改变量的值
    {                         //m是引用捕获,可以修改变量的值
        m  = 20;
        return n*x;
    };
    
    std::cout<<f(10)<<std::endl;  //输出100
    std::cout<<m<<std::endl;      //输出20
    return 0;
}

此外

[&] : 引用捕获所有封闭范围中(所处的作用域中)的变量
[=] :  按值捕获所有封闭范围中(所处的作用域中)的变量

在c++14后还可以在捕获语句中定义新的变量

    auto f = [n , &m , k = 5](auto x)
    {
        m  = 20;
        return n*x;
    };

标签:return,int,auto,捕获,c++,作用域,表达式,lambda
From: https://www.cnblogs.com/algoshimo/p/18059683

相关文章

  • C++保证线程安全的方式
    1、互斥量可以确保同一时间只有一个线程访问临界区,防止出现竞态条件。2、原子操作std::atomic<int>mutex(1);对原子变量的操作是线程安全的。3、读写锁std::shared_mutexmutex;//读者:共享锁定mutex.lock_shared();mutex.unlock_shared();//写者:独占锁定mutex.lock......
  • c/c++指针中 * 和 & 的区别与联系
    在C语言中,*和&是两个非常基础但功能相反的操作符,它们分别是解引用(dereference)操作符和取地址(address-of)操作符。&(取地址操作符)用途:&操作符用来获取变量的内存地址。示例:假设有一个整型变量intx=10;,则&x表示获取变量x的内存地址。如果你有一个指针变量想要存储变量x的地址,可......
  • 20240307正则表达式对常见字段的校验
    验证固话号码//表示以0开头,后跟2到3位数字,然后是-,最后是7到8位数字。publicstaticbooleancheckPhoneNumber(StringphoneNumber){if(StringUtils.isEmpty(phoneNumber)){returnfalse;}Patternpattern=Pattern.co......
  • 正则匹配:既不包含表达式1也不包含表达式2的连续多个字符
    要匹配既不包含表达式1,也不包含表达式2的连续多个字符,可以使用负向预查来实现。下面是一个示例正则表达式:^(?!.*表达式1)(?!.*表达式2).*$在这个正则表达式中:^ 表示匹配字符串的开头。(?!.*表达式1) 是第一个负向预查,确保字符串中不包含表达式1。(?!.*表达式2) 是第二个......
  • C++语言代码开发示例-身份证实名认证接口
    实名认证API实时联网核验个人身份信息与所持身份证件人员的一致性,可满足不同应用场景的不同实名认证需求,如身份证号+姓名核验、身份证号+姓名+人像核验、身份证号+姓名+证件人像+现场人像核验等,有助于推动诚信网络环境建设,降低利用网络进行违法犯罪的可能性,防止纠纷和诈骗,确保消费......
  • C++ 萃取机 Iterator Traits
    IteratorTraits萃取出Iterator的性质:迭代器种类、迭代器所指数据类型、迭代器距离类型、迭代器所指数据引用、迭代器所指数据指针。根据不同的迭代器种类可以采取不同的算法策略。但是用iter::interator_categotry、iter::value_type、iter::pointer...就可以访问到迭代器的......
  • Q:oracle通过正则表达式替换对应值
    示例视图把原ip地址替换成192.167.41.60:8080SELECTreplace(jg.yxwjjdz,regexp_substr(jg.yxwjjdz,'([0-9]{1,3}.){3}[0-9]{1,3}.{0,10}[0-9]/'),'192.167.41.60:8080/'函数用法regexp_like(search_string,pattern[,match_option])参数说明:search_string:是搜索值patter......
  • C#中的delegate与Lambda表达式
    参考:Lambda表达式和匿名函数 什么是lambda表达式?C#中的lambda表达式是一种匿名函数,可以用于简化代码,避免定义命名函数或委托。lambda表达式的语法如下:(parameter1,parameter2,...)=>expressionlambda表达式的示例:C#//将一个数字加1Func<int,int>addO......
  • 03_C++基本数据类型_复合类型
    主要复合类型:引用和指针1.引用允许在一条语句中定义多个引用,其中每个引用标识符都必须以&开头。#include<iostream>usingnamespacestd;intmain(){intb;int&a=b;b=6;cout<<"a:"<<a<<endl;cout<<"b:"<......
  • [转]如果继承上一任的C++库
    转自微信公众号:CSDN原文链接:https://gaultier.github.io/blog/you_inherited_a_legacy_cpp_codebase_now_what.html作者|PhilippeGaultier译者|郑丽媛有时候,也许你刚换了一份新工作,也许刚换了一个团队,也许团队中某个有经验的人刚离开,这时需要你来继承一个旧的C++ 代码......