C++ lambda捕获和引用捕获区别

avatar
作者
筋斗云
阅读量:0

在C++中,lambda函数可以通过捕获列表来捕获外部变量。有两种捕获方式:值捕获和引用捕获。

  1. 值捕获:当使用值捕获时,lambda函数会将外部变量的值拷贝到lambda函数内部,这样lambda函数就可以在其生命周期内访问这个值,而不受外部变量的改变影响。
int x = 10; auto lambda = [x](){     std::cout << x << std::endl; }; x = 20; lambda(); // 输出10 
  1. 引用捕获:当使用引用捕获时,lambda函数会直接引用外部变量,在lambda函数的生命周期内,外部变量的改变会影响lambda函数内部对该变量的访问。
int x = 10; auto lambda = [&x](){     std::cout << x << std::endl; }; x = 20; lambda(); // 输出20 

因此,值捕获会在lambda函数内部创建一个变量的拷贝,而引用捕获会直接引用外部变量。选择捕获方式取决于具体需求,需要注意避免引用捕获时外部变量被销毁导致悬空指针的问题。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!