在范围内存在不可复制的局部变量时按值捕获
Capture by value in presence of non copyable locals in scope
当我有一个 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
,并且不显式捕获它,因此不会捕获它,也没有问题。
相关文章:
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- c++ 变量在宏的扩展中没有在这个范围内声明
- C++中静态方法的局部变量范围
- 变量不在 lambda 的范围内
- 离开范围后如何保护局部变量的值?
- 检查私有成员变量是否在一定范围内,如果没有调整
- 如何找到在本地范围内声明的变量的地址?
- 变量未在此范围内声明 数组线性搜索
- "... already defined in *.obj"但我没有在同一范围内两次定义任何变量
- 在其范围之外使用局部变量
- 在 mingw64- 变量下的窗口中编译 openvpn3 时出错,未在范围内声明
- 将局部变量保存到全局向量中,为什么离开局部范围后可以得到这些局部变量?
- 尝试声明函数的局部变量,但得到范围错误
- 无法在命名空间范围内分配变量
- 为什么变量在局部范围内声明,并放入范围外可见的向量中
- 在最近的封闭范围内使用using指令声明局部外部变量
- 如何在C++的另一个范围内使用局部变量
- 在类范围内声明与类属性同名的局部变量