在范围内存在不可复制的局部变量时按值捕获
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
,也没有显式捕获,所以不捕获也没有问题。
当我有一个 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
,也没有显式捕获,所以不捕获也没有问题。