Общий случай
Нет, цикл for
предназначен для любого вида итеративной обработки.Не только для чисел.
Выражение
for (a;b;c)
d;
(почти) совпадает с
{
a;
while (b) {
d;
c;
}
}
Пустое тело означает, что основное преимущество уже ва, б и в.
Приложение к вашему заявлению
Итак, к вашему заявлению:
for (register unsigned long long i = 0xaull; engine_tick(); kRuntimeStatistics::INSTANCE.FramesSinceStart++, ++ i);
это то же самое, что
{
register unsigned long long i = 0xaull;
while (engine_tick()) {
kRuntimeStatistics::INSTANCE.FramesSinceStart++;
++ i;
}
}
Несколько замечаний:
- пустой для тела, с точкой с запятой в конце строки, чрезвычайно подвержен ошибкам (я потратил целую ночь на отладку некоторого кода один раз, просто чтобы выяснить, что я не видел точку с запятой, так что я былвводить в заблуждение отступом).Поэтому я бы рекомендовал ставить точку с запятой на следующей строке с правильным отступом, просто чтобы обратить внимание на потенциальную ловушку.
register
не имеетболее длинная добавленная стоимость, так как оптимизатор компилятора выполняет намного лучшую работу, чем ручной выбор переменных регистра.Это даже не рекомендуется сейчас. - оператор запятой позволяет объединять два выражения в одно.Я перевел это в полуколонку для ясности.Обратите внимание, что
++i
мог быть перемещен в тело for в исходном коде по той же причине. 0xaull
означает, что это шестнадцатеричное литерал (0x
) со значением a
(A в шестнадцатеричном виде равно 10) типа unsigned long long
.