Являются ли статические переменные, используемые в лямбде, сохраняемыми через вызовы функции, в которой используется лямбда? Или объект функции "создал" снова каждый вызов функции?
Бесполезный пример:
#include <iostream>
#include <vector>
#include <algorithm>
using std::cout;
void some_function()
{
std::vector<int> v = {0,1,2,3,4,5};
std::for_each( v.begin(), v.end(),
[](const int &i)
{
static int calls_to_cout = 0;
cout << "cout has been called " << calls_to_cout << " times.\n"
<< "\tCurrent int: " << i << "\n";
++calls_to_cout;
} );
}
int main()
{
some_function();
some_function();
}
Каков правильный результат для этой программы? Является ли это зависимым от факта, если лямбда фиксирует локальные переменные или нет? (он, безусловно, изменит базовую реализацию объекта функции, поэтому он может иметь влияние). Это допустимая поведенческая несогласованность?
Я не ищу: "Мой компилятор выводит...", это слишком новая функция, чтобы доверять текущим реализациям IMHO. Я знаю, что вопрос о стандартных котировках кажется популярным, так как мир обнаружил, что такая вещь существует, но все же я бы хотел получить достойный источник.