温馨提示×

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

c++
小樊
193
2024-07-05 18:54:24
栏目: 编程语言
C++开发者专用服务器限时活动,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函数内部创建一个变量的拷贝,而引用捕获会直接引用外部变量。选择捕获方式取决于具体需求,需要注意避免引用捕获时外部变量被销毁导致悬空指针的问题。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读:C++ lambda捕获是怎么工作的

0