Каждое выражение лямбда генерирует уникальный объект функции (замыкание), который сохраняет захваченные переменные в качестве элементов данных. Например, выражение lambda в вашем коде будет преобразовано в компилятор таким образом:
struct __uniquely_named_lambda
{
__uniquely_named_lambda(int& pos)
: pos(pos) {}
int& pos;
void operator()() const
{ ++pos; }
};
Вызов лямбда - это просто вызов operator()
.
элемент данных является ссылкой, поскольку вы захватили по ссылке. Если вы захватили по значению, это будет простой int
. Также обратите внимание, что сгенерированный operator()
по умолчанию const
. Вот почему вы не можете изменять захваченные переменные, если не используете ключевое слово mutable
.
Нет, это невозможно. Там нет веб-API, которые дают вам эту информацию.