while
loop
Условно выполняет оператор повторно.
Содержание |
Синтаксис
attr
(необязательно)
while (
condition
)
statement
|
|||||||||
| attr | - | (since C++11) любое количество атрибутов |
| condition | - | условие |
| statement | - | инструкция (обычно составная инструкция) |
Условие
Условием может быть либо condition , либо expression , либо simple declaration .
|
(since C++26) |
- Если это может быть синтаксически разрешено как выражение, оно трактуется как выражение. В противном случае оно трактуется как объявление которое не является объявлением структурированной привязки (начиная с C++26) .
Когда управление достигает условия, условие даёт значение, которое используется для определения, будет ли statement выполнена.
Выражение
Если condition является выражением, возвращаемое им значение — это значение выражения, контекстно преобразованное в bool . Если это преобразование некорректно, программа является некорректной.
Объявление
Если condition является простым объявлением, возвращаемое значение - это значение переменной решения (см. ниже), контекстно преобразованное в bool . Если это преобразование некорректно, программа является некорректной.
Объявление без структурированной привязки
Объявление имеет следующие ограничения:
- Синтаксически соответствует следующей форме:
|
(до C++11) |
|
(начиная с C++11) |
- Декларатор не может определять функцию или массив .
- последовательность спецификаторов типа (до C++11) последовательность спецификаторов объявления может содержать только спецификаторы типа и constexpr , и она (начиная с C++11) не может определять класс или перечисление .
Переменная решения объявления - это объявленная переменная.
Декларация структурированной привязкиДекларация имеет следующие ограничения:
Переменной решения декларации является введённая переменная e введённая декларацией . |
(начиная с C++26) |
Объяснение
Оператор while эквивалентен
/* метка */
:
|
|||||||||
Если condition является объявлением, то объявляемая переменная уничтожается и создается заново при каждой итерации цикла.
Если цикл необходимо прервать внутри statement , в качестве завершающей инструкции можно использовать break statement .
Если текущую итерацию необходимо прервать внутри statement , в качестве сокращения можно использовать continue statement .
Примечания
Независимо от того, является ли statement составным оператором, он всегда вводит область видимости блока . Переменные, объявленные в нём, видны только в теле цикла, другими словами,
while (--x >= 0) int i; // i выходит из области видимости
то же самое, что
while (--x >= 0) { int i; } // i выходит из области видимости
В рамках гарантии прогресса C++ поведение является неопределённым , если цикл не являющийся тривиальным бесконечным циклом (начиная с C++26) без наблюдаемого поведения не завершается. Компиляторам разрешено удалять такие циклы.
Ключевые слова
Пример
#include <iostream> int main() { // цикл while с одним оператором int i = 0; while (i < 10) i++; std::cout << i << '\n'; // цикл while с составным оператором int j = 2; while (j < 9) { std::cout << j << ' '; j += 2; } std::cout << '\n'; // цикл while с условием-объявлением char cstr[] = "Hello"; int k = 0; while (char c = cstr[k++]) std::cout << c; std::cout << '\n'; }
Вывод:
10 2 4 6 8 Hello
Смотрите также
|
C documentation
для
while
|