考虑以下代码:
int counter = 0;
QTimer* timer = new QTimer(this);
connect(timer, &QTimer::timeout, [this, &counter]() mutable {
counter++;
qDebug() << counter;
});
timer->start(500);
预期:
1
2
3
4
...
输出:
32766 (a random number)
...
这里有一些不确定的东西吗?我什么都找不到这种效果。
&counter
中的 CC_1表示您正在捕获lambda中的 counter
副词。
如果变量int counter
已经超出了范围(因为局部变量是不会执行的(,则这意味着您有一个悬空的参考;使用它是未定义的行为。
解决此问题的简单方法是按值捕获计数器-[this, counter]
而不是[this, &counter]
。然后,Lambda将拥有自己的counter
状态副本。由于它是可变的,它将有权编辑自己的状态。