Здравствуйте, alex_public, Вы писали:
_>Нет, здесь не о том речь. Я здесь говорю про разницу между таким кодом:
_>_>for(auto c: col) f(c);
_>for(auto c: col) g(c);
_>
_>и таким кодом:
_>_>for(auto c: col){
_> f(c);
_> g(c);
_>}
_>
_>Надеюсь не надо объяснять разницу?)
Надо объяснять, откуда вообще взялся код
for(auto c: col) f(c);
for(auto c: col) g(c);
Никакая из предложенных реализаций в стиле linq ничего подобного не порождает.
_>Переменная, используемая для агрегации по коллекции, в случае правильного императивного кода превращается в регистр процессора (соседствует с переменной, по которой идёт итерация цикла).
Ну и что? Мы же знаем, что на самом деле этих регистров процессора — много, и реальный компилятор разворачивает циклы для того, чтобы исполнитель использовал разные "eax" для соседних итераций.