您的位置:首页 >C++ Lambda表达式怎么写?C++11 Lambda函数使用指南【现代C++】
发布于2026-02-24 阅读(0)
扫一扫,手机访问
<p>C++ Lambda表达式由捕获列表、参数列表和函数体三部分组成,语法为cap->ret{body};C++11引入后简化回调、STL算法配合与局部封装。</p>

写 C++ Lambda 表达式,核心就三部分:捕获列表、参数列表、函数体,中间用 []、()、{} 隔开。C++11 引入后,它让回调、算法配合、局部函数封装变得更简洁直接。
最简形式:[capture](params) -> return_type { body }
[x] 值捕获变量 x,[&y] 引用捕获 y,[=] 默认值捕获所有自动变量,[&] 默认引用捕获(),也可写 (int a, const string& s)-> int 这种尾置返回类型不用记死规则,看几个高频场景:
[]{ cout << "hello"; }();auto add = [](int a, int b) -> int { return a + b; };,然后调用 add(3, 5)int offset = 10; auto plus_off = [=](int x) { return x + offset; };(值捕获 offset)mutable 关键字,如 [x]() mutable { ++x; }(否则值捕获的变量在 Lambda 内只读)vector v = {1,2,3,4}; auto it = find_if(v.begin(), v.end(), [](int n){ return n > 2; }); 捕获不是万能的,容易踩坑:
[=] 或 [&] 引发意外生命周期问题——比如 Lambda 存活时间超过被引用变量的生命周期,引用捕获就会悬空auto、std::function 或用 std::move 转移std::function:
std::function fib = [&](int n) -> int { return (n <= 1) ? 1 : fib(n-1) + fib(n-2); }; 不是为了炫技,而是解决实际问题:
sort、transform、for_each 等算法传自定义逻辑,比写独立函数+函数指针更轻量std::thread([&]{ /*...*/ });)基本上就这些。Lambda 是现代 C++ 的基础能力,写熟了会发现它让代码更紧凑、意图更清晰,不复杂但容易忽略细节。
下一篇:Win11系统激活方法及教程详解
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9