Если вы сделаете захват по значению в лямбда, вы получите «член», который будет сохранен. Поскольку по умолчанию operator()
является функцией const, вы не можете их изменять.
Lambdas может быть определен как []() mutable {}
, чтобы вы могли изменять локальные переменные.
значение по ссылке, у вас есть что-то, что ведет себя как указатель const к объекту non-const, поэтому без изменчивого вы можете адаптировать эти объекты. (Если они уже не существуют)
Захваченные переменные действительно const
в области lamba:
[foo]()
{
// foo, whatever that is, is const
}
В изменяемой лямбда захваченные переменные не являются константами:
[foo]()
mutable {
// Lambda can modify foo, but it's a copy of the original
// captured variable
}
const
, а скорее вызовoperator()
является функциейconst
-члена, если толькоlambda
не определен какmutable
. – 101010 21 August 2016 в 14:09