Лямбда: почему значения, захваченные по значению, являются константными, а значения, полученные по ссылке, нет?

Почему значения захвата по значению являются константными, а объекты захвата по ссылке - нет:

int a;

auto compile_error = [=]()
{
  a = 1;
}
auto compiles_ok = [&]()
{
  a = 1;
}

Мне это кажется нелогичным, но это кажется стандартом? Тем более, что нежелательная модификация захваченного значения может быть досадной ошибкой, но велика вероятность того, что последствия будут ограничены лямбда-областью, тогда как нежелательная модификация объектов, захваченных по ссылке, часто приводит к более серьезным последствиям.

Так почему бы не захватить с помощью константной ссылки по умолчанию? Или, по крайней мере, поддержка [const &] а также [&]? Каковы причины этого дизайна?

В качестве обходного пути вы, вероятно, должны использовать std :: cref константные ссылки const, захваченные по значению?

Ответы на вопрос(3)

Ваш ответ на вопрос