访问lambda内部循环控制变量
Accessing loop control variable inside lambda
我正在使用以下代码,目的是访问lambda内部的i
:
for (int i = 0; i < FLAGS_threads; i++) {
threads[i] = std::thread([=, &client, &tn, &i, &families, &rows, &cols, &val
] {
我发现在每次迭代中,lambda内的i
的值是FLAGS_threads
。
实现我的目标的适当语法是什么?
您需要通过Value 。
捕获通过参考捕获有两个问题。
首先是所有线程都将共享相同的变量,将其更改为一个线程(甚至是"主"线程(在所有线程中都会更改它。这意味着当循环超过其值时,等于FLAGS_threads
(在您的情况下(。
第二个问题更糟:循环内的变量i
是 em local !如果您在循环结束后使用它,请参考它会导致不确定的行为
除非您实际上需要,否则请始终按值捕获。
并且,如果您需要在代码中使用的引用捕获许多变量,也许您应该默认来捕获逐个引用,然后添加i
变量的异常?
喜欢
[&, i]() { ... }
,但请记住我上面说的话。您是否真的需要捕获所有通过参考捕获其变量的所有变量?
另一个提示:保持较小的兰伯达。大型Lambdas往往很难阅读和遵循,因此很难维护。也许最好使用功能?或在lambda中调用函数?
相关文章:
- 在循环中按顺序遍历成员变量
- 我可以创建一个包含两个变量的 for 循环,但时间复杂度仍然为 O(n) 吗?
- 与 for 循环中的变量混淆
- 如何在循环之外重新输入变量
- 在 c++ 中基于范围的 for 循环中使用引用作为控制变量
- 需要帮助定义循环控制变量(while loops)C++
- 代码样式:在 switch/if 语句的分支中重用控件表达式或控制变量
- 访问lambda内部循环控制变量
- C 是循环控制变量,并且在循环中相同
- 不受控制的循环和函数 C++跳过
- 变量循环范围会导致返回局部变量的地址引用
- 如何用python中的变量控制循环的增量
- ifstream变量循环不打印任何内容
- 使用计数器控制while循环
- 有条件地控制 for 循环方向的最佳方法是什么
- 按字符控制变量
- 如何防止g++优化由IRQ可以更改的变量控制的循环
- 在工作线程完成MFC时禁用控制变量
- c++变量/循环问题
- iOS上的跨平台渲染器:从c++类控制主循环