Częściej niż nie musimy pętle jak tenDlaczego stan podczas wykonywana poza zrobić, gdy zakres
do
{
Type value(GetCurrentValue());
Process(value);
}while(condition(value));
Niestety nie będzie to skompilować, ponieważ zakres value
„s kończy się na }
. Co oznacza, że będę musiał ją zadeklarować poza pętlą.
Type value;
do
{
value = GetCurrentValue();
Process(value);
}while(condition(value));
Nie podoba mi się to z co najmniej dwóch powodów. Po pierwsze lubię deklarować rzeczy lokalnie. Po drugie, jest to problem, jeśli wartość nie jest przypisywalna lub domyślna, a jedynie możliwa do skopiowania.
Moje pytanie ma dwie strony. Po pierwsze, chciałbym wiedzieć, czy istnieje szczególny powód/trudność w rozszerzeniu zakresu działania while do stanu końcowego (tak samo jak zakres zmiennych zadeklarowanych w pętli for zawiera ciało pętli for pomimo fizycznego istnienia poza aparatem). A jeśli uważasz, że odpowiedź na moje pierwsze pytanie brzmi: "Tak po prostu jest, nie pytaj, dlaczego pytania". wtedy chciałbym wiedzieć, czy istnieją idiomy, które mogą pomóc w napisaniu pętli do-while podobnych do tych w moim przykładzie, ale bez wspomnianych wad.
Mam nadzieję, że pytania są jasne.
Zdajesz sobie sprawę, to jest taka sama dla każdego innego rodzaju pętli, prawda? Nie jest to specyficzne do zrobienia/kiedy, więc naprawdę prosisz o zrobienie/pozostanie w szczególnym przypadku. –
Potencjalnie można to wyczyścić, zachowując zakres zmiennej warunkowej, używając zamiast tego pętli 'for'. –
* Częściej niż ** potrzebujemy ** pętli takich jak ta * -> Nie używałem pętli * do-while * w ciągu kilku lat. –