QT连接:使用lambda表达式重置通过了int变量(怪异)
Qt Connections: Using Lambda Expression Resets Passed int Variable (Weird)
考虑以下代码:
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
状态副本。由于它是可变的,它将有权编辑自己的状态。
相关文章:
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- "Missing type specifier - int assumed"无法通过向主函数添加"return 0"来解决
- 错误:从"int"到"int*"的转换无效[-允许].我在下面提供了我的代码,我
- <int> 通过 json 格式的串行发送矢量
- QT连接:使用lambda表达式重置通过了int变量(怪异)
- 为什么printf和cout为此无符号int提供了不同的输出
- 我已经通过了该问题的所有测试用例,甚至是Udebugg上的所有测试用例,并且仍然在UVA在线法官上获得了WA裁决
- int显示了8个字节
- 使用 int*&通过引用传递指针会导致奇怪的问题
- 如何在C 中执行主程序时是否通过了一分钟是否通过
- 宏通过了2个论点,但只有1个
- 以 0 开头的 int 发生了什么变化?前 00101
- eclipse显示互斥对象类型的错误,尽管编译通过了
- 非常简单的程序通过了VS2010 c++内存泄漏检查器,但在销毁所有对象后仍然在程序端使用更多内存
- 什么论点通过了
- LeetCode Word Break,未通过在线评委,但通过了在线测试
- C++向量通过了值:我做对了吗
- Visual Leak Detector报告一个int*泄漏了40个字节
- 为什么这个基本的线程程序在Clang中失败了,而在g++中却通过了