2013-11-13 5 views
1

, пожалуйста, может ли кто-нибудь объяснить мне, как условный переменный будет сохранен в этом случае, который будет использоваться при вызове check_calls_on_current_floor за пределами блока условий?Code blocks & lambdas C++ 11

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

Похоже, что в этом случае мы можем получить доступ к этой переменной вне блока условий, если у нас есть лямбда.

+0

Возможный дубликат [Использование указателя-к-члену для чтения значения поля объекта cons] (http://stackoverflow.com/questions/19934348/using-pointer-to-member-to-read-value-of -cons-объекты-поле) –

ответ

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 
} 
1

Это несколько аналогично этому:

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

Если условие выполнено, то z будет указывать на y, который вышел за рамки.

Смежные вопросы