Не могу для себя ответить на такй вопрос: В каких случаях полезно использовать [&] и [=] вместо явного перечесления набора параметров?
Из плюсов у меня есть только один довод — очень лень прописывать аргументы, но это довод так себе, т.к. если лямбда использует овер дофига переменных, то это уже какая-то не правильная лямбда, а если их всего 1...4, то и перечислить не проблема. К тому же, мы полностью контролируем что происходит внутри.
Из мунусов [&=] — сложнее отследить область использования переменной. В случае с & мы можем случайно что-то испортить на стеке, например, вместо константной функции, может быть вызвана мутирующая, таким образом после завершения лямбды гораздо сложнея предсказать что было изменено. В случае [=] кто-то выше по стеку создаст тяжелый для копирования объект и лямбда его скопирует, тоже плохо...