gpt4 book ai didi

c++ - 代码块和 lambdas c++11

转载 作者:行者123 更新时间:2023-11-30 01:20:03 24 4
gpt4 key购买 nike

谁能解释一下,在这种情况下,conditionalVariable 将如何存储,以便在 check_calls_on_current_floor 调用条件 block 外时使用?

std::function<bool()> check_calls_on_current_floor;
if (/*Some condition*/)
{
const int conditionalVariable = /*some value*/;

check_calls_on_current_floor = [&](){
return conditionalVariable == 10; };
}
check_calls_on_current_floor();

在这种情况下,我们似乎可以在条件 block 之外访问此变量,以防我们从那里获得 lambda。

最佳答案

这是一个悬空引用。在 if block 之后进行该调用是未定义的行为。这与从函数返回对局部变量的引用非常相似。它更类似于此:

struct ref_holder
{
ref_holder(const int & r) :ref(r) {}
const int & ref;
};

int main()
{
std::unique_ptr<ref_holder> ptr;
if (true)
{
const int conditionalVariable = 10;

ptr.reset(new ref_holder(conditionalVariable));
}
ptr->ref == 10; // undefined behavior
}

关于c++ - 代码块和 lambdas c++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19945660/

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