Нечто подобное должно работать. Вы использовали блок With
для кода, но фактически не использовали его. Вам не нужны дополнительные ссылки на тот же объект. В этом я проверил, пуста ли ячейка, если не использовать
Я теперь предпочитаю"for (;;)
"идиома, потому что это, кажется, 'терпит' больше. Я раньше использовал"while (true)
"идиома, потому что я думал, что она выразила намерение лучше, но я переключился, потому что я думаю"for (;;)
"идиома достаточно известна соответственно выразить намерение, а также я полагаю, что это лучше, будучи более видимым.
Отчасти как то, как Stroustrup сделал новые броски в C++ целеустремленно ужасными - таким образом, они терпят.
while(true) {}
Это, кажется, передает значение цикла наиболее эффективно.
Я обычно использую while() {}
, но после изучения этого for(;;) {}
не своего рода сумасшедший недопустимый синтаксис, я, несомненно, буду использовать более уникальную опцию.
Дифференцирует бесконечные циклы от фактических условных выражений, Вы видите.
Бесконечные циклы являются плохой идеей, но на практике который не всегда держит.
Я предпочитаю, в то время как (1) {}, но удостоверяются, что что-то в цикле может заставить это вспыхивать.
Когда написание кода для меня я использую для (; ;). Другие люди склонны быть смущенными его синтаксисом и так для кода, который должны видеть/использовать другие люди, я использую, в то время как (верный).
Я обычно использую for(;;) { }
о котором я всегда думаю как "навсегда".
Некоторые языки предлагают a repeat { }
создайте, который исходно циклично выполнится навсегда. Я нахожу for(;;) { }
создайте визуально самое подобное этому, потому что это так отличается от нормального for()
создать. Это - важный атрибут для бесконечного цикла это while(1) { }
действительно не имеет.
Я использую for (;;)
на языках C-стиля и while true
на языках, которые не поддерживают ту конструкцию.
Я учился for (;;)
метод в K&R и было всегда похоже на идиоматический C мне.
offtopic: если Вы будете думать о том, что Вы пытаетесь выразить, то Вам обычно не будет нужен бесконечный цикл.
Я предпочитаю while(1)
или while(true)
- это является самым ясным. do { } while(true)
походит на бесполезную путаницу. Аналогично, for(;;)
может сбивать с толку людей, которые никогда не видели его прежде, тогда как while(true)
очень интуитивно. И нет абсолютно никакой причины сделать label: ... goto label;
, это просто более сбивает с толку.
Мне нравится использовать для (; ;) подход, потому что MSVC ++ компилятор жалуется на подход цикла с условием продолжения:
void main()
{
while(1) // test.cpp(5) : warning C4127: conditional expression is constant
{
}
for(;;)
{
}
}
for (;;)
{
/* No warnings are generated about constant value in the loop conditional
plus it is easy to change when you realize you do need limits */
}
Хвостовая рекурсия Бога ;)
Это - несколько иждивенец компилятора...
Пусть начинается пламя ...
Если цикл является истинным бесконечным циклом (т.е. нет условия прерывания - только внешнее событие может завершить выполнение потока / процесса), то я предпочитаю метку и goto
. Вот почему:
Во-первых, использование while
, для
и do ... while
означает, что цикл может завершиться. Даже если условие завершения никогда не достижимо, синтаксическое значение этих конструкций состоит в том, что является некоторым условием завершения.
Во-вторых, использование конструкции цикла вводит дополнительный уровень отступа. . Я ненавижу отступы, в которых нет необходимости. Он тратит впустую ценную столбчатую недвижимость.
В-третьих, единственный истинный бесконечный цикл - это тот, который безусловно переходит обратно в начало цикла. Только goto
точно подходит для этой цели.
По правде говоря, меня это особо не волнует. Все они выполняют свою работу, и большинство из них в любом случае приведет к одним и тем же инструкциям по сборке. Однако , сгенерированная сборка, по всей вероятности, будет безусловным переходом (если вы оптимизатор, черт возьми), который напрямую отображается на какую конструкцию C, дети? Правильно ... ваш старый друг goto
.
goto
. Все они выполняют свою работу, и большинство из них в любом случае приведет к одним и тем же инструкциям по сборке. Однако , сгенерированная сборка, по всей вероятности, будет безусловным переходом (если вы оптимизатор, черт возьми), который напрямую отображается на какую конструкцию C, дети? Правильно ... ваш старый друг goto
.