Общий дифференцирующим фактором между следующими петлями:
while (condition) {action}
do {action} while (condition)
является то, что бывший используется для циклов, которые происходят нулевой или более раз в то время как последний для петель, которые происходят один или больше времени ,
Иными словами, условие для while
проверяется в начале цикла, а для do while
оно проверяется в конце.
Часто вы увидите код, где разработчики, кажется, не знают о do-while
в том, что они пишут:
result = doSomething();
while (result == NOT_FINISHED) {
result = doSomething();
}
, которые можно было бы лучше записать в виде:
do {
result = doSomething();
} while (result == NOT_FINISHED);
Однако в вашем конкретном случае, когда условие всегда true
, это не имеет большого значения. Следующие циклы основном эквивалентны (с использованием 1
для истинного случая):
for (;;) { doSomething(); }
for (;;doSomething());
while (1) { doSomething(); }
do { doSomething(); } while (1);
while (doSomething(),1);
BADPAX: doSomething(); goto BADPAX;
Первый for
цикл, вероятно, канонический способ сделать бесконечный цикл, пользуясь тем, что, если опустить условие продолжения для цикла он предполагает, что это всегда верно.
Второй цикл for
просто перемещает тело петли в часть итерации for
.
Первый while
также иногда встречается в дикой природе, do-while
, вероятно, меньше. Единственное отличие здесь состоит в том, что первые петли навсегда проверяют вершину петли, последние петли навсегда проверяют на дне петли.
Окончательный while
цикла с помощью оператора запятая C таким образом, вы, вероятно, никогда не следует :-)
Это последнее очень редко в наше время, но, вероятно, что все они оптимизируют вниз на уровне машинного кода.
Я никогда не видел 'do while (true)'. Это бесконечный цикл, но идиоматический (и понятный) способ написать один, если 'for (;;)'. –