gpt4 book ai didi

c++ - Lambda 返回引用会导致段错误 - 为什么?

转载 作者:行者123 更新时间:2023-11-30 04:15:24 25 4
gpt4 key购买 nike

以下代码取自straight out of one of my projects .第一个版本导致崩溃(段错误)。第二个版本按预期工作。

这两个代码片段不是等价的吗?


这个崩溃了

auto getUserFromPacket = [&](sf::Packet& mP) -> User& 
{
return users.getUser(ssvuj::as<std::string>(getDecompressedPacket(mP), 0));
};
pHandler[FromClient::US_Death] = [&](ClientHandler&, sf::Packet& mP)
{
getUserFromPacket(mP).stats.deaths += 1; // segmentation fault here!
};

这个有效

pHandler[FromClient::US_Death] = [&](ClientHandler&, sf::Packet& mP)        
{
users.getUser(ssvuj::as<std::string>(getDecompressedPacket(mP), 0)).stats.deaths += 1;
// this works fine
};

使用的编译器:clang++ 3.4 - 它也无法推断出 getUserFromPacket 的返回类型。 usersUserDB 的实例。函数签名是 User& UserDB::getUser(const std::string&) - 为什么编译器无法将 User& 推断为返回类型?

最佳答案

不,它们不等同。第一个将引用 lambda,它(很可能)在需要时不在范围内。第二个没有这种依赖性。始终小心通过引用捕获。 :)

关于c++ - Lambda 返回引用会导致段错误 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18324452/

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