在C++中,lambda表達式是一種匿名函數,可以在函數內部定義并使用,而不需要單獨聲明函數。lambda表達式可以捕獲外部作用域的變量,以便在lambda函數體內使用。
在lambda表達式中,可以使用以下方式來捕獲外部變量:
示例代碼:
#include <iostream>
int main() {
int x = 10;
int y = 20;
// 按值捕獲
auto lambda1 = [x, y]() {
std::cout << "x: " << x << ", y: " << y << std::endl;
};
// 按引用捕獲
auto lambda2 = [&x, &y]() {
x = 100;
y = 200;
std::cout << "x: " << x << ", y: " << y << std::endl;
};
// 按引用捕獲(mutable)
auto lambda3 = [&x, &y]() mutable {
x = 100;
y = 200;
std::cout << "x: " << x << ", y: " << y << std::endl;
};
lambda1();
lambda2();
lambda3();
std::cout << "x: " << x << ", y: " << y << std::endl;
return 0;
}
在上面的示例代碼中,我們定義了三個lambda表達式,分別按值捕獲、按引用捕獲和按引用捕獲(mutable)外部變量x和y。通過調用這些lambda表達式,我們可以看到它們對外部變量的影響不同。lambda1只讀取外部變量的值,不會影響外部變量本身;lambda2和lambda3修改了外部變量的值,會影響外部變量本身。