c++ - 为什么 lambda 取变量的初始值
问题描述
问题是为什么程序打印 id:0, id:1, id:2, 42 而不是 id:42, id:43, id:44, 45。
int main()
{
int id = 0;
auto f = [id] () mutable {
std::cout << "id: " << id << std::endl;
++id; // OK
};
id = 42;
f();
f();
f();
std::cout << id << std::endl;
return 0;
}
解决方案
因为id
被值捕获,即被复制。并且当声明 lambda 时(即发生捕获时)id
具有0
.
您可能希望将其更改为按引用捕获。
auto f = [&id] () {
// ^
std::cout << "id: " << id << std::endl;
++id;
};
顺便说一句:对于这种情况mutable
变得多余。
推荐阅读
- matlab - 说话人识别系统中的欧几里得距离
- reactjs - 如何将选项卡导航器标题减少到状态栏?
- php - PHP - 从 XML 标记中删除前导和尾随空格
- html - 如果我们的文件名不是 index.html,为什么找不到浪涌显示页面?
- python - 我正在尝试使用 python 的 webbrowser 模块在 chrome 中打开 DINO Game
- openssl - 以 SagePay 网关形式将 mcrypt 升级为 OpenSSL 加密
- javascript - jQuery数据表 - 将行作为变量传递给模态
- node.js - 如何在mongodb集合中为不存在的月份返回0
- javascript - Redux 更新状态数组中的项
- arrays - 存储/保存 @State 数组 (UserDefaults)