QT中在外部定义int counter后报错不能再内部的lambda中改变赋值变量// 定义计数器 int counter = 0; // 定时器事件处理函数 connect(timer, &QTimer::timeout, this, [=](){ // 每次定时器事件更新计数器 counter++; // 执行任务 // ... // 达到指定次数后停止定时器 if (counter >= 16) { timer->stop(); } });
时间: 2024-03-08 22:51:08 浏览: 60
C++11/14 线程中使用Lambda函数的方法
在Lambda表达式中访问外部定义的变量时,需要使用捕获列表来指定变量的访问方式。默认情况下,Lambda表达式只能访问外部变量的值,而不能改变它们的值。如果你想在Lambda表达式中改变外部变量的值,可以使用引用捕获或者可变捕获。
例如,在上面的代码中,如果你想要在Lambda表达式中改变counter变量的值,你可以将其改为引用捕获:
```c++
int counter = 0;
connect(timer, &QTimer::timeout, this, [&counter](){
counter++;
// ...
if (counter >= 16) {
timer->stop();
}
});
```
或者,你可以使用可变捕获:
```c++
int counter = 0;
connect(timer, &QTimer::timeout, this, [=]() mutable {
counter++;
// ...
if (counter >= 16) {
timer->stop();
}
});
```
在这两种情况下,Lambda表达式中的counter变量都可以被改变。但是,使用引用捕获可能会导致变量被不正确地修改,因此建议使用可变捕获。
阅读全文