1

拜托,谁能解释一下,在这种情况下如何存储条件变量,以便在条件块外调用 check_calls_on_current_floor 时使用?

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();

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

4

2 回答 2

3

这是一个悬而未决的参考。if在块之后进行调用是未定义的行为。这与从函数返回对局部变量的引用非常相似。它与此更相似:

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
}
于 2013-11-13T05:03:31.970 回答
1

这有点类似于:

int x = 0;
int* z = &x;
if (condition)
{
    int y = 1;
    z = &y;
}

如果条件成立,那么z将指向y哪个已经超出范围。

于 2013-11-13T05:07:36.920 回答