Capture by value gives a lambda its own copy of a variable.

Capture By Value

capture_by_value.cpp
#include <iostream>

int main() {
    int base = ;

    auto addBase = [base](int amount) {
        return base + amount;
    };

    base = 100;
    int result = addBase(5);

    std::cout << "capturedResult=" << result << std::endl;
    std::cout << "currentBase=" << base << std::endl;
    return 0;
}
#include <iostream>

int main() {
    int base = ;

    auto addBase = [base](int amount) {
        return base + amount;
    };

    base = 100;
    int result = addBase(5);

    std::cout << "capturedResult=" << result << std::endl;
    std::cout << "currentBase=" << base << std::endl;
    return 0;
}
#include <iostream>

int main() {
    int base = ;

    auto addBase = [base](int amount) {
        return base + amount;
    };

    base = 100;
    int result = addBase(5);

    std::cout << "capturedResult=" << result << std::endl;
    std::cout << "currentBase=" << base << std::endl;
    return 0;
}
value capture When a lambda captures by value, later changes to the original variable do not change the captured copy.