Capture by reference lets a lambda update a variable outside the lambda body.

Capture By Reference

capture_by_reference.cpp
#include <iostream>

int main() {
    int increment = ;
    int total = 0;

    auto addToTotal = [&total](int value) {
        total += value;
    };

    addToTotal(increment);
    addToTotal(2);

    std::cout << "increment=" << increment << std::endl;
    std::cout << "total=" << total << std::endl;
    return 0;
}
#include <iostream>

int main() {
    int increment = ;
    int total = 0;

    auto addToTotal = [&total](int value) {
        total += value;
    };

    addToTotal(increment);
    addToTotal(2);

    std::cout << "increment=" << increment << std::endl;
    std::cout << "total=" << total << std::endl;
    return 0;
}
#include <iostream>

int main() {
    int increment = ;
    int total = 0;

    auto addToTotal = [&total](int value) {
        total += value;
    };

    addToTotal(increment);
    addToTotal(2);

    std::cout << "increment=" << increment << std::endl;
    std::cout << "total=" << total << std::endl;
    return 0;
}
reference capture When a lambda captures by reference, it works with the original variable.