Статические переменные в лямбде
#include <iostream>
void f(int x = [](){ static int x; return x++; }()) {
std::cout << x;
}
int main() {
f();
f();
}
Почему программа выводит 01, а не 00, ведь тип лямбды уникален?
Ответы (1 шт):
Автор решения: Chorkov
→ Ссылка
Тип лямбды уникален для каждой точки инстанционирования, но не для каждого экземпляра лямбды. Почему так? Потому что для языка со статической типизацией невозможно иметь бесконечное (или порождаемое динамически) число типов данных. Рассмотрим пример:
template<typename F>
void do_work(F func)
{
func();
std::cout<< typeid(F).name() << std::endl;
}
int main()
{
for(;;)
do_work( [](){} );
}
Если бы для каждой итерации в цикле порождался отдельный тип - то программа была бы бесконечного размера, поскольку для каждого из типов данных нужно иметь среди констант уникальную строку с именем класса.