[&var]: 按引用访问特定变量 var,并捕获所有其他变量。
[=]: 捕获所有父作用域中的变量并按值访问。
[var]: 按值访问特定变量 var,并捕获所有其他变量。
[]: 不捕获任何变量。
在这些形式中,& 表示按引用捕获,= 表示按值捕获。方括号内的变量列表表示要捕获的特定变量。
例如,下面是一个使用按引用访问和按值访问的 lambda 表达式的示例:
int a = 10;
int b = 20;
// 使用按引用访问的 lambda 表达式
[&]() {
std::cout << "a = " << a << ", b = " << b << std::endl;
}();
// 使用按值访问的 lambda 表达式
[a, &b]() {
std::cout << "a = " << a << ", b = " << b << std::endl;
}();
第一个 lambda 表达式使用 &,它捕获了所有父作用域中的变量并按引用访问。因此,当我们在 lambda 表达式中修改变量 a 和 b 时,它们的值也会被修改。
第二个 lambda 表达式使用 [a, &b],它仅按值访问变量 a,而按引用访问变量 b。这意味着我们可以在 lambda 表达式中修改变量 b,但不能修改变量 a。