То что в квадратных скобках — это то, как лямбда захватывает переменные снаружи.
[] вообще не захватывает, нет доступа к локальным переменным снаружи.
[=] захватывает все по значению (копирует).
[&] захватывает все по ссылке.
Можно еще отдельные переменные захватывать:
[=, &a, &b] — захватить a и b по ссылке, все остальные (используемые в теле лямбды) по значению.
[&, c, d, e = func()] — захватить c, d по значению, e определить как результат вызова функции, все остальные (используемые в теле лямбды) захватить по ссылке.