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

Capture by value in presence of non copyable locals in scope

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

#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,也没有显式捕获,所以不捕获也没有问题。