Есть ли разница между передачей значений через список захвата и через аргументы лямбды? С++

У нас есть некоторая лямбда:

std::int64_t a = /*....*/;
std::int64_t b = /*....*/;
std::thread{[](){ /* do something */ }};

Есть ли разница в производительности, если я буду передавать в лямбду значения следующими способами:

std::thread{[a, b](){ /* do something */ }};
std::thread{[](std::int64_t a, std::int64_t b){ /* do something */ }, a, b};

Концептуально понятно, что в случае передачи через список захвата таким образом, значения будут копироваться и записываться во внутреннем состоянии лямбды. Кроме того без mutable их нельзя будет изменить. Но как это влияет на производительность и на поведение "под коробкой"?


Ответы (0 шт):