在C++中,lambda表達式可以通過捕獲列表來捕獲外部變量。捕獲列表指定了lambda表達式可以訪問的外部變量,可以是按值捕獲或按引用捕獲。
按值捕獲會在lambda表達式創建時將外部變量的副本保存在lambda內部,而按引用捕獲則通過引用直接訪問外部變量。按值捕獲可以保證lambda表達式在之后訪問的變量值不會被修改,而按引用捕獲則可以更改外部變量的值。
捕獲列表可以通過以下方式來指定:
[ ]
:空捕獲列表,不捕獲任何外部變量。[var]
:按值捕獲變量var。[&var]
:按引用捕獲變量var。[=]
:按值捕獲所有外部變量。[&]
:按引用捕獲所有外部變量。示例:
int main() {
int x = 10;
int y = 20;
// 按值捕獲x,按引用捕獲y
auto lambda = [x, &y]() {
std::cout << "x = " << x << ", y = " << y << std::endl;
};
x = 30;
y = 40;
lambda(); // 輸出 x = 10, y = 40
return 0;
}
在上面的示例中,變量x按值捕獲,lambda表達式創建時保存了變量x的副本。而變量y按引用捕獲,lambda表達式直接訪問外部變量y。