C++ Lambda表达式由捕获列表、参数列表和函数体三部分组成,语法为cap->ret{body};C++11引入后简化回调、STL算法配合与局部封装。

写 C++ Lambda 表达式,核心就三部分:捕获列表、参数列表、函数体,中间用 []、()、{} 隔开。C++11 引入后,它让回调、算法配合、局部函数封装变得更简洁直接。
最简形式:[capture](params) -> return_type { body }
[x] 值捕获变量 x,[&y] 引用捕获 y,[=] 默认值捕获所有自动变量,[&] 默认引用捕获(),也可写 (int a, const string& s)
-> int 这种尾置返回类型不用记死规则,看几个高频场景:
[]{ cout
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<int> v = {1,2,3,4}; auto it = find_if(v.begin(), v.end(), [](int n){ return n > 2; });</int>
捕获不是万能的,容易踩坑:
立即学习“C++免费学习笔记(深入)”;
[=] 或 [&] 引发意外生命周期问题——比如 Lambda 存活时间超过被引用变量的生命周期,引用捕获就会悬空auto、std::function 或用 std::move 转移std::function:
std::function fib = [&](int n) -> int { return (n
不是为了炫技,而是解决实际问题:
sort、transform、for_each 等算法传自定义逻辑,比写独立函数+函数指针更轻量std::thread([&]{ /*...*/ });)基本上就这些。Lambda 是现代 C++ 的基础能力,写熟了会发现它让代码更紧凑、意图更清晰,不复杂但容易忽略细节。
以上就是C++ Lambda表达式怎么写?C++11 Lambda函数使用指南【现代C++】的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号