Здравствуйте, Евгений Коробко, Вы писали:
ЕК>Да вы что! Это же замечательная вещь. Можно работать с неименованной переменной без копирования в локальную переменную. Это и быстро (х.з. сможет компилятор ли соптимизировать лишее копирование), и красиво — не загромождаем код лишними переменными.
А вот нефиг
копировать. Заводишь именованную
ссылку на временный объект и наслаждаешься.
for(Query& q = conn.execute("select * from table"); !q.eof(); q.next())
{
...
}
Заметьте, цикл for — с выделенными предикатом проверки и выражением итерирования. А не while, где это итерирование засунуто бог весть куда (что, кстати, не только читаемость ухудшает, но и даёт возможность для ошибок)
// сравните
for(init(); cond(); next())
{
work1();
if(x()) continue;
if(y()) continue;
work2();
}
// с неправильным
init();
while(cond())
{
work1();
if(x()) continue;
if(y()) continue;
work2();
next();
}
// и правильным, но громоздким (лишний код)
init();
while(cond())
{
work1();
if(x()) { next(); continue; }
if(y()) { next(); continue; }
work2();
next();
}
// или ещё более громозким (лишняя переменная, лишний текст)
init();
bool secondary=false;
while(true)
{
if(secondary) next(); else secondary=true;
if(!cond()) break;
work1();
if(x()) continue;
if(y()) continue;
work2();
}
На паскале специально не написал — синтаксис более громоздкий. Но идея и так видна.