Lambda表达式什么时候需要捕获的变量
时间: 2023-11-26 08:03:54 浏览: 39
Lambda表达式捕获变量的主要目的是在Lambda表达式内部访问其外部作用域中的变量。当Lambda表达式需要使用外部作用域中的变量时,就需要将这些变量捕获到Lambda表达式的内部。
Lambda表达式可以捕获的变量有两种类型:按值捕获和按引用捕获。按值捕获会将变量的值复制到Lambda表达式中,而按引用捕获会将变量的引用传递给Lambda表达式。需要注意的是,在Lambda表达式中捕获的变量必须是可见的,否则会导致编译错误。
需要捕获变量的情况包括:
1. 当Lambda表达式需要访问其外部作用域中的变量,但这些变量不是全局变量,也不是Lambda表达式的参数。
2. 当Lambda表达式需要在外部作用域中的变量的基础上进行计算或修改。
例如,以下代码使用Lambda表达式对向量中的偶数进行平方运算,并将结果存储在另一个向量中:
```
std::vector<int> v = {1, 2, 3, 4, 5};
std::vector<int> result;
int factor = 2;
std::for_each(v.begin(), v.end(), [&] (int n) {
if (n % 2 == 0) {
result.push_back(n * n * factor);
}
});
```
在这个例子中, `factor` 是一个外部变量,Lambda表达式需要将它捕获到内部,以便在计算平方时使用。使用 `[&]` 捕获列表捕获了所有外部变量,包括 `factor`。
需要注意的是,如果Lambda表达式内部修改了按值捕获的变量的值,那么这些变量在Lambda表达式外部的值不会发生变化。而如果Lambda表达式内部修改了按引用捕获的变量,那么这些变量在Lambda表达式外部的值也会发生相应的变化。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)