在范围内存在不可复制的局部变量时按值捕获

Capture by value in presence of non copyable locals in scope

本文关键字:局部变量 范围内 存在 可复制      更新时间:2023-10-16

当我有一个 lambda 函数按值捕获其封闭范围时,为什么即使该范围内有不可复制的对象,代码也要编译?

#include <iostream>
#include <memory>
int main()
{
  std::unique_ptr<int> p = std::make_unique<int>(3); 
  auto f = [=](int j){ for(int i(0); i < j; i++) printf("blah"); }; 
  f(2); 
}

默认捕获不会捕获作用域中的每个局部变量;只会捕获 lambda 正文中使用的变量。您不使用p,并且不显式捕获它,因此不会捕获它,也没有问题。