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

涉及各种高级特性的c++ lambda表达式例子

复杂C++ Lambda表达式,涉及嵌套Lambda、高阶函数、可变捕获、移动捕获、模板参数以及异常处理等概念。

#include <iostream>
#include <functional>
#include <vector>
#include <memory>
#include <stdexcept>// 一个复杂的Lambda表达式示例
int main() {int base = 10;std::string message = "Result: ";// 外层Lambda:捕获局部变量,返回一个函数对象auto complex_lambda = [base, msg = std::move(message)](int multiplier) mutable -> std::function<std::string(int)> {// 修改按值捕获的变量(需要mutable)base += 5;msg += "Processed: ";// 内层Lambda:捕获外层Lambda的变量auto inner_lambda = [modified_base = base * multiplier, &msg](int value) mutable -> std::string {try {if (value == 0) {throw std::runtime_error("Division by zero attempted");}// 最内层Lambda:进行实际计算auto calculator = [](int a, int b) -> double {return static_cast<double>(a) / b;};double result = calculator(modified_base, value);msg += "Calculation successful";return msg + " -> " + std::to_string(result);} catch (const std::exception& e) {return std::string("Error: ") + e.what();}};return inner_lambda;};// 使用Lambda表达式auto processor = complex_lambda(3);  // base=15, multiplier=3 → modified_base=45std::cout << processor(5) << std::endl;  // 45/5=9.0// 另一个复杂用例:Lambda与STL算法结合std::vector<int> data = {1, 2, 3, 4, 5};std::unique_ptr<int> ptr = std::make_unique<int>(100);std::for_each(data.begin(), data.end(), [captured_ptr = std::move(ptr), index = 0](int& elem) mutable {elem += *captured_ptr + index++;});std::cout << "Modified data: ";for (int val : data) {std::cout << val << " ";}std::cout << std::endl;return 0;
}

1. ​​多层嵌套Lambda​​

这个示例包含了三层Lambda嵌套 :
  • 外层complex_lambda捕获局部变量并返回函数对象
  • 中层inner_lambda捕获外层Lambda的变量
  • 内层calculator执行实际计算

2. ​​多种捕获方式​​

  • ​​值捕获​​:base按值捕获
     
  • ​​引用捕获​​:msg按引用捕获(在内层Lambda中)
     
  • ​​移动捕获​​:msg = std::move(message)使用C++14的初始化捕获
     
  • ​​移动语义​​:captured_ptr = std::move(ptr)移动智能指针
     

3. ​​高阶函数特性​​

外层Lambda返回一个std::function对象,本身又接受参数,体现了高阶函数的特性。

4. ​​可变捕获与mutable关键字​​

使用mutable关键字允许修改按值捕获的变量baseindex

5. ​​异常处理​​

内层Lambda包含完整的try-catch块,处理可能的除零异常。

6. ​​与STL算法集成​​

示例展示了Lambda与std::for_each算法的结合使用。
这个复杂的例子涵盖了Lambda表达式的大部分高级特性,在实际项目中,这类结构常用于回调机制、异步编程和算法定制等场景。
 
http://www.hskmm.com/?act=detail&tid=18957

相关文章:

  • Altium Designer(AD)自定义PCB外观颜色 - 实践
  • 使用 Azure AD 实现认证与权限管理:原理解析与操作指南 - 详解
  • 2025 年地坪研磨机厂家推荐榜单:盘点 TOP 品牌的格力,宁德时代等标杆客户合作案例
  • 分拆数
  • 【PLC】昱控兼容三菱FX3U PLC作为Modbus RTU从机,使用串口调试助手访问
  • B站python入门学习---第二阶段第二章数据库、SQL和MySQL
  • C++项目:仿muduo库高并发服务器 - 实践
  • 完整教程:zk管理kafkakafka-broker通信
  • 域泛化DomainBed的评价指标含义解释
  • JUC: 线程锁
  • 上证指数历年每月涨跌统计 - Leone
  • InteractiveCommunication Problems
  • JSON 框架混用避坑指南:FastJSON vs Jackson
  • 企业级大数据技术栈:基于Hadoop+Spark的全球经济指标分析与可视化环境实践
  • 若邻接矩阵是三角矩阵,则存在拓扑序列;反之则不一定成立
  • 20250927Sat VIM 在函数内部任一行,按 [[ 即跳转到函数的开头
  • macOS 多 Java 版本管理(jenv 方案)
  • 软件技术基础第一次课程
  • 石子合并(一排的和一个环的)
  • 思维题练习
  • NXP - 用MCUXpresso IDE导入lpcopen_2_10_lpcxpresso_nxp_lpcxpresso_1769.zip中的工程 - 教程
  • spatial项目的主要领导者斯坦福大学ppl实验室的 Kunle Olukotun 教授和 Christos Kozyrakis 教授
  • 程序语言杂谈:概述
  • 字符串基础
  • 在CodeBolcks下wxSmith的C++编程教程——使用 wxGrid
  • 题解:P12479 [集训队互测 2024] 长野原龙势流星群
  • linux下nginx
  • 9.27
  • OI 笑传 #12
  • spatial芯片设计语言 学习笔记