Les Lambdas et la capture par référence les variables locales : Accès après la portée

Je transmets mon local des variables par référence à deux lambda. J'appelle ces lambdas en dehors de la portée de la fonction. Est-ce undefined ?

std::pair<std::function<int()>, std::function<int()>> addSome() {
    int a = 0, b = 0;
    return std::make_pair([&a,&b] {
        ++a; ++b;
        return a+b;
        }, [&a, &b] {
            return a;
        });
}

int main() {
    auto f = addSome();
    std::cout << f.first() << " " << f.second();
    return 0;
}

Si elle n'est pas, cependant, des changements dans l'un lambda ne sont pas reflétées dans d'autres lambda.

Suis-je malentendu par référence dans le contexte des lambdas ?

Je suis en train d'écrire pour les variables et il semble fonctionner correctement sans l'exécution des erreurs avec la sortie

2 0. Si cela fonctionne, alors je m'attends à la sortie 2 1.

OriginalL'auteur Ashish Negi | 2015-01-05