Lambda Capture: Value Capture vs Reference Capture

Question 4 / 51 Correct so far: 0 (0 answered)

Snippet A

Capture By Value

std::size_t processOnce(const std::vector<std::string>& data) {
    auto fn = [data]() {
        std::size_t total = 0;
        for (const auto& s : data) total += s.size();
        return total;
    };
    return fn();
}

std::size_t result = processOnce(STRINGS);
Snippet B

Capture By Ref

std::size_t processOnce(const std::vector<std::string>& data) {
    auto fn = [&data]() {
        std::size_t total = 0;
        for (const auto& s : data) total += s.size();
        return total;
    };
    return fn();
}

std::size_t result = processOnce(STRINGS);
Shared test data (shared-setup)
static const std::vector<std::string> STRINGS = []() {
    std::vector<std::string> v;
    v.reserve(512);
    for (int i = 0; i < 512; ++i)
        v.push_back("item_" + std::to_string(i) + "_data");
    return v;
}();

Which snippet is faster?

Select the correct answer(s)