Почему сохраняется значение переменной в контексте другой функции?
Подскажите, пожалуйста, почему, когда я вызываю лямбда-функцию несколько раз подряд, то значение переменной а сохраняется и в консоли выводится 1,2:
auto fun()
{
int a = 1;
std::cout << "fun A:" << a << std::endl;
return [&]()
{
std::cout <<"Lambda A:" << a++ << std::endl;
};
}
int main()
{
auto y = fun();
y();
y();
}
Но если я между вызовом лямбды-функции вызову саму функцию fun(), то ее значение сбрасывается и в консоли я получаю 1,1?
auto fun()
{
int a = 1;
std::cout << "fun A:" << a << std::endl;
return [&]()
{
std::cout <<"Lambda A:" << a++ << std::endl;
};
}
int main()
{
auto y = fun();
y();
fun();
y();
}