Avatar ·

什么是C++中的lambda表达式,什么时候应该使用它?

大家好!我正在学习C++,经常在同事的代码中看到类似这样的内容: ```cpp std::vector numbers = {5, 2, 8, 1, 9}; std::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a < b; }); ``` 或者这样: ```cpp std::for_each(numbers.begin(), numbers.end(), [](int& x) { x *= 2; }); ``` 我明白这是某种匿名函数,但还没有完全理解。文档里写着“lambda表达式”,但解释有些复杂。我有几个问题: 1. 用简单的话说,什么是lambda表达式?它和普通函数有什么区别? 2. 开头的方括号`[]`有什么用?里面可以写什么? 3. 什么时候最好用lambda,什么时候用普通函数或functor? 4. 如何正确捕获变量?我见过`[=]`、`[&]`、`[this]`——它们是什么意思? 特别是捕获的语法让我害怕。我尝试为排序编写自己的callback,使用了外部变量,但没成功。请解释一下。