温馨提示×

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

c++
小樊
187
2024-07-05 18:54:24
栏目: 编程语言

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

0