Чаще всего нам нужны петли, как этотПочему состояние в то время как в вне делать, а объем
do
{
Type value(GetCurrentValue());
Process(value);
}while(condition(value));
К сожалению, это не будет компилироваться, так как сфера value
«s заканчивается }
. Это означает, что мне придется объявить его вне цикла.
Type value;
do
{
value = GetCurrentValue();
Process(value);
}while(condition(value));
Мне не нравится это, по крайней мере, по двум причинам. Во-первых, мне нравится декларировать вещи на местном уровне. И, во-вторых, это проблема, если значение не присваивается или не может быть построено по умолчанию, но только для копирования.
Итак, мой вопрос имеет две стороны. Во-первых, я хотел бы знать, есть ли какая-то особая причина/трудность в расширении области действия до конечного условия (так же, как область переменных, объявленных в цикле for, включает тело цикла for, несмотря на то, что оно физически вне брекетов). И если вы считаете, что ответ на мой первый вопрос: «Это так, как есть. Не спрашивайте, почему вопросы». то я хотел бы знать, есть ли идиомы, которые могут помочь написать циклы do-while, похожие на те, что приведены в моем примере, но без упоминавшихся ниже минусов.
Надеюсь, что вопросы понятны.
Вы понимаете, что это то же самое для любого другого вида петли, верно? Это не относится к do/while, поэтому вы действительно просите, чтобы do/while был особым случаем. –
Вы можете потенциально очистить это, сохранив при этом область переменной условия, используя вместо этого цикл 'for'. –
* Чаще всего мы ** нуждаемся в ** циклах, подобных этому * -> Я не использовал цикл * do-while * в течение нескольких лет. –