当前位置: 首页 > news >正文

C++ 语言特性06 - lambda表达式

一:概述

        1. 语法

[ captures ] ( params ) specifiers exception -> ret { body }其中:captures 是捕获列表,用于捕获当前函数作用域的变量,分为按值捕获和按引用捕获。params 是可选参数列表,和普通函数一样。specifiers 是可选限定符,C++中可以用mutable,它允许在lambda中改变按值。exception 是可选异常说明符,C++中使用noexcept指明lambda是否会抛出异常ret 是可选返回值类型。

        2. 例子

#include <iostream>
int main()
{int a = 10;auto foo = [a](int b)->int { return a * b; };std::cout << foo(8) << std::endl;
}

二:注意事项

         1. 静态变量和全局变量在lambda表达式中直接使用

#include <iostream>
int a = 1;
int main()
{int b = 2;static int c = 3;auto foo = [b] { return a + b + c; };std::cout << foo() << std::endl;
}

        2. 按值捕获变量在lambda中不能修改。 

void test()
{int x = 10, y = 5;auto foo = [x, y] {x += 1; // 编译失败,无法改变xy += 2; // 编译失败,无法改变yreturn x * y;};std::cout << foo() << std::endl;
}

        3. mutable的作用是可以修改按值捕获的变量

void test()
{int x = 10, y = 5;auto foo = [x, y] () mutable {x += 1; y += 2; return x * y;};std::cout << foo() << std::endl;
}

         


http://www.mrgr.cn/news/40824.html

相关文章:

  • AI产品经理PRD文档与传统产品经理PRD有什么不同呢?
  • 从概念到使用全面了解Llama 3 这个迄今为止最强大的开源模型
  • wsl(2) --- ubuntu24.04配置
  • NLP任务之文本分类(情感分析)
  • MySQL 大数据量导入与导出全攻略
  • MySQL 的复制延迟:理解与解决方案
  • 每天五分钟深度学习pytorch:基于pytorch搭建一元线性回归模型
  • 【教学类-59-01】20241001双面五星红旗国旗(中2班)
  • 手把手教你使用uniapp开发H5应用
  • 国外电商系统开发-需求记录
  • docker零基础入门教程
  • KPaaS集成平台与传统集成有什么不同?
  • Java网络通信—TCP
  • 【CKA】五、网络策略–NetworkPolicy
  • 【Android 源码分析】Activity生命周期之onStop-1
  • 泰勒图 ——基于相关性与标准差的多模型评价指标可视化比较-XGBoost、sklearn
  • 【Transformer】自回归和解码器
  • openpnp - 底部相机高级校正的参数设置
  • 深度解析:Python蓝桥杯青少组精英赛道与高端题型概览
  • 983. 最低票价