gpt4 book ai didi

c++ - Qt5、lambda 和变量的范围

转载 作者:行者123 更新时间:2023-11-30 02:00:47 25 4
gpt4 key购买 nike

我在 Qt5 中有一个 QLocalServer,它连接到 newConnection() 信号。

那个信号调用这个函数:

QLocalSocket *clientConnection = m_server->nextPendingConnection();
clientID++; // <--- declared in header
clientConnection->setProperty("ID", QVariant(clientID));

connect(clientConnection, &QLocalSocket::disconnected, [clientConnection](){
qDebug() << "Client disconnected " << clientConnection->property("ID");
clientConnection->deleteLater();
});

如果两个客户端(客户端ID 1和客户端ID 2)一个接一个连接,然后客户端1断开连接,lambda函数内部会发生什么?我的意思是,在第二个客户端连接后,clientConnection 的值会发生什么变化?它会被覆盖(因此第一个客户端的 clientConnection 将不再有效)还是每个客户端都有有效数据?

最佳答案

lambda 闭包类型的每个实例都有自己的存储空间,用于存储按值捕获的成员。

int i = 1;
auto l1 = [i]() { return i; }; // captures 1
i = 2;
auto l2 = [i]() { return i; }; // captures 2
l1(); // returns 1
l2(); // returns 2

关于c++ - Qt5、lambda 和变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14771639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com