在C++中,lambda函数可以通过捕获列表来捕获外部变量。有两种捕获方式:值捕获和引用捕获。
int x = 10;
auto lambda = [x](){
std::cout << x << std::endl;
};
x = 20;
lambda(); // 输出10
int x = 10;
auto lambda = [&x](){
std::cout << x << std::endl;
};
x = 20;
lambda(); // 输出20
因此,值捕获会在lambda函数内部创建一个变量的拷贝,而引用捕获会直接引用外部变量。选择捕获方式取决于具体需求,需要注意避免引用捕获时外部变量被销毁导致悬空指针的问题。