Поскольку простые захваты имеют точный, cv-квалифицированный тип того, что они захватывают, вы можете сделать внешнюю переменную const
и, таким образом, получить постоянный захват:
#include <iostream>
int main()
{
const int i = 42;
// ^^^^^
int j = 108;
auto lambda = [i, j]() mutable
{
i = 15;
std::cout << "i = " << i << std::endl;
std::cout << "j = " << j << std::endl;
};
lambda();
}
Конечно, если вам нужночтобы изменить внешнюю переменную в какой-то момент, вам сначала нужно сделать ее копию или каким-то образом изменить ее код, чтобы сделать ее немного более аккуратной.