在范围内存在非可复制本地的情况下按值捕获

时间:2015-01-05 13:59:17

标签: c++ lambda

当我有一个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); 
}

1 个答案:

答案 0 :(得分:2)

默认捕获不捕获作用域中的每个局部变量;只有在lambda体中使用的那些。您不使用p,也不会明确捕获它,因此不会捕获它并且没有问题。