while цикл
Условно выполняет оператор повторно.
Синтаксис
attr (необязательно) while ( condition ) statement |
| attr | — | (начиная с C++11) любое количество атрибутов |
| condition | — | условие |
| statement | — | оператор (обычно составной оператор) |
Условие
condition может быть либо выражением, либо простым объявлением.
| (начиная с C++26) |
- Если его можно синтаксически распознать как выражение, оно рассматривается как выражение. В противном случае оно рассматривается как объявление, не являющееся объявлением структурированной привязки(начиная с C++26).
При передаче управления к условию оно вычисляется и выдаёт значение, которое используется для определения, будет ли выполнен statement.
Выражение
Если condition является выражением, выданное им значение — это значение выражения, контекстно преобразованное в bool. Если такое преобразование некорректно, программа некорректна.
Объявление
Если condition является простым объявлением, выданное им значение — это значение переменной выбора (см. ниже), контекстно преобразованное в bool. Если такое преобразование некорректно, программа некорректна.
Объявление, не являющееся объявлением структурированной привязки
Объявление должно удовлетворять следующим ограничениям:
- Синтаксически соответствовать следующей форме:
| (до C++11) |
| (начиная с C++11) |
- Декларатор не может задавать функцию или массив.
- Последовательность спецификаторов типа(до C++11)Последовательность спецификаторов объявления может содержать только спецификаторы типа и constexpr, и она(начиная с C++11) не может определять класс или перечисление.
Переменная выбора в объявлении — это объявленная переменная.
Объявление структурированной привязкиОбъявление должно удовлетворять следующим ограничениям:
Переменная выбора в объявлении — это фиктивная переменная | (начиная с C++26) |
Пояснение
Оператор while эквивалентен
/* метка */ :
|
Если condition является объявлением, объявленная им переменная уничтожается и создаётся заново на каждой итерации цикла.
Если цикл необходимо завершить внутри statement, в качестве оператора завершения можно использовать оператор break.
Если текущую итерацию необходимо завершить внутри statement, для этого можно использовать оператор continue.
Примечания
Независимо от того, является ли statement составным оператором, он всегда вводит блочную область видимости. Объявленные в нём переменные видны только в теле цикла. Иными словами,
while (--x >= 0)
int i;
// i goes out of scope
эквивалентно
while (--x >= 0)
{
int i;
} // i goes out of scope
В соответствии с гарантией прогресса C++ поведение является неопределённым, если цикл, не являющийся тривиальным бесконечным циклом(начиная с C++26) без наблюдаемого поведения не завершается. Компиляторам разрешено удалять такие циклы.
Ключевые слова
Пример
#include <iostream>
int main()
{
// while loop with a single statement
int i = 0;
while (i < 10)
i++;
std::cout << i << '\n';
// while loop with a compound statement
int j = 2;
while (j < 9)
{
std::cout << j << ' ';
j += 2;
}
std::cout << '\n';
// while loop with a declaration condition
char cstr[] = "Hello";
int k = 0;
while (char c = cstr[k++])
std::cout << c;
std::cout << '\n';
}
Вывод:
10 2 4 6 8 Hello
См. также
Документация по C для while |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/language/while