阅读量:0
在C++中,lambda函数可以通过捕获列表来捕获外部变量。有两种捕获方式:值捕获和引用捕获。
- 值捕获:当使用值捕获时,lambda函数会将外部变量的值拷贝到lambda函数内部,这样lambda函数就可以在其生命周期内访问这个值,而不受外部变量的改变影响。
int x = 10; auto lambda = [x](){ std::cout << x << std::endl; }; x = 20; lambda(); // 输出10
- 引用捕获:当使用引用捕获时,lambda函数会直接引用外部变量,在lambda函数的生命周期内,外部变量的改变会影响lambda函数内部对该变量的访问。
int x = 10; auto lambda = [&x](){ std::cout << x << std::endl; }; x = 20; lambda(); // 输出20
因此,值捕获会在lambda函数内部创建一个变量的拷贝,而引用捕获会直接引用外部变量。选择捕获方式取决于具体需求,需要注意避免引用捕获时外部变量被销毁导致悬空指针的问题。