В чем разница между for (;;) и while (1)?

Возможный дубликат:
Это на (;;) быстрее, чем на while (TRUE)? Если нет, то почему люди его используют?

Мне было интересно, в чем разница между for(;;) и while(1), когда оба выполняют одну и ту же функцию? Будет ли разница в скорости компиляции


person abhinav    schedule 04.12.2010    source источник
comment
Как вы можете закрыть вопрос передовой практики C ++, указывая на ответы передовой опыт C #? Простите, но это абсурд. Проголосовали за повторное открытие.   -  person sbi    schedule 04.12.2010
comment
будет ли разница в скорости компиляции !! обычно программисты используют while, а не for   -  person abhinav    schedule 04.12.2010
comment
@sbi: Я думаю, что путаница возникает из-за того, что ответы на эти два вопроса практически эквивалентны. Но я согласен, это это совершенно другой вопрос.   -  person Cody Gray    schedule 04.12.2010
comment
Во всяком случае, это более подходящий дубликат: stackoverflow.com/questions/2611246/   -  person Cody Gray    schedule 04.12.2010
comment
@Cody: Это действительно так. Это точный дубликат? Мы можем закрыть это указание на это? (И: даже если ответы на вопросы о передовом синтаксисе практически эквивалентны для разных языков, синтаксис передовой практики IMO по-прежнему оправдывает вопросы, связанные с языком. И мой ответ даже не относится к C #, поскольку он не имеет такого количества компиляторов, как C ++.)   -  person sbi    schedule 04.12.2010


Ответы (10)


Разница между ними в том, что многие компиляторы будут предупреждать о while(true) («постоянное выражение, используемое как выражение цикла»), в то время как ни один из известных мне не предупреждал о for(;;).

Однако они должны генерировать один и тот же код.

person sbi    schedule 04.12.2010
comment
... что кажется большим плюсом для for(;;), поскольку никто не пишет случайно ни while(true), ни for(;;). - person Stuart Golodetz; 04.12.2010
comment
@sgolodetz: Я думал, из моего ответа будет понятно, какой из них я предпочитаю. - person sbi; 04.12.2010
comment
Я думаю, да. Извини, мне не нужно было втыкать сюда мое весло ... - person Stuart Golodetz; 04.12.2010

Никакой функциональной разницы, дело вкуса.

person Evan Teran    schedule 04.12.2010

С for вы можете сделать это:

#define ever (; ;) // note the two happy faces? ;)

for ever { ... }   // endless loop

Что невозможно с while.

person fredoverflow    schedule 04.12.2010
comment
+1 за творчество, да. Однако вы можете написать: #define forever (1) while forever {...} - person Baltasarq; 04.12.2010
comment
Это просто ... такая плохая идея. Словами не описать. - person meagar; 05.12.2010
comment
Разве нельзя #define forever for(; ;), а потом _2 _... - person flcoder; 18.02.2018

  • Оба вызовут бесконечный цикл, если break не вызывается явно.
  • Лично я предпочитаю while (1), он более читабельный
person Andreas Wong    schedule 04.12.2010
comment
Определенно дело вкуса; Я нахожу for(;;) более читаемым. - person meagar; 05.12.2010
comment
+1 для (;;) {также работает в java и javascript) - person bestsss; 19.01.2011

Нет разницы. Я предпочитаю последнее.

person Prasoon Saurav    schedule 04.12.2010
comment
будет ли разница в скорости во время компиляции .. еще одна вещь, saurav, видел ли ты мой другой вопрос об автоматическом переключении передач, я с нетерпением жду ответа на этот вопрос !! - person abhinav; 04.12.2010
comment
@abhinav: Нет, сгенерированный машинный код, скорее всего, будет одинаковым в обоих случаях. Насколько я понимаю, вы уже приняли ответ на этот вопрос. - person Prasoon Saurav; 04.12.2010
comment
@saurav Я принял ответ, но все еще с нетерпением жду другого подхода .. - person abhinav; 04.12.2010
comment
@saurav, не могли бы вы сказать мне, какую книгу мне следует сослаться на C ++, я занимаюсь англ. 1-й год, и у меня нет особого представления о языке - person abhinav; 04.12.2010
comment
@abhinav: прочтите Учебник по C ++ от Стэна Липпмана. - person Prasoon Saurav; 04.12.2010

6 из одного, 110 из другого.

Последнее кажется более лаконичным.

person Andrew Barber    schedule 04.12.2010

Без разницы, если вы не хотите использовать какой-нибудь счетчик позже, как показано ниже.

for (int i =0; i < 100; i++) {
   // some code
} 
person fastcodejava    schedule 04.12.2010

Оба они одинаковы в C ++. Однако ваше сообщение помечено тегами c# и c++.

Если вы используете C #, вам нужно использовать while (true) {...}. Лично я предпочитаю то же самое в C ++: числа используются только при работе с ... ну, числами! При работе с логическими значениями вместо них используются true и false.

person ClosureCowboy    schedule 04.12.2010

Оба они определяют одно и то же функциональное поведение и производят один и тот же код IL из C #.

person VdesmedT    schedule 04.12.2010

Я олдскульный, но до сих пор занимаюсь следующим:

#define TRUE 1  
#define FALSE 0  
while (TRUE) { /*--do something, mutley--* }
person Simon Catlin    schedule 04.12.2010
comment
Так что ты единственный ... ›_‹ - person Karl Knechtel; 04.12.2010