当我有一个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);
}
答案 0 :(得分:2)
默认捕获不捕获作用域中的每个局部变量;只有在lambda体中使用的那些。您不使用p
,也不会明确捕获它,因此不会捕获它并且没有问题。