История изменений
Исправление alysnix, (текущая версия) :
// замыкания a1 и a2 на стеке, но никаких адресов в списке параметров нет a1 = gen(1); a2 = gen(2);
я ж не могу в одном предложении описать все особенности реализации. в данном случае используются скалярные константы, адресов у них нет. они сами будут пропихнуты в функции.
тогда транслируя выражение a1 = gen(1); компилятор (например) создаст «отложенный вызов» вида gen(1), и свяжет его с именем a1, у этот вызов будет делать везде, где будет вызов a1().
сразу скажем, что работать это будет нормально пока не будет возможность в языке переприсвоить a1 чем-то другим. поскольку статический анализ не наш путь, придется делать функторы какие-нить.
Исходная версия alysnix, :
// замыкания a1 и a2 на стеке, но никаких адресов в списке параметров нет a1 = gen(1); a2 = gen(2);
я ж не могу в одном предложении описать все особенности реализации. в данном случае используются скалярные константы, адресов у них нет. они сами будут пропихнуты в функции.
тогда транслируя выражение a1 = gen(1); компилятор (например) создаст «отложенный вызов» вида gen(1), и свяжет его с именем a1, у этот вызов будет делать везде, где будет вызов a1().