Namespaces
Variants

while loop

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

조건부로 문장을 반복적으로 실행합니다.

목차

구문

attr  (선택 사항) while ( condition ) statement
attr - (since C++11) 임의의 개수의 attributes
condition - 하나의 condition
statement - 하나의 statement (일반적으로 복합문)

조건

조건은 condition expression 이거나 simple declaration 일 수 있습니다.

  • 구문적으로 structured binding 선언으로 해결될 수 있는 경우, structured binding 선언으로 해석됩니다.
(C++26부터)
  • 만약 문법적으로 표현식으로 해결될 수 있다면, 표현식으로 취급됩니다. 그렇지 않으면 선언으로 취급됩니다 (구조화된 바인딩 선언이 아닌) (C++26부터) .

제어가 조건에 도달하면, 조건은 값을 산출하며, 이 값은 statement 가 실행될지 여부를 결정하는 데 사용됩니다.

표현식

만약 condition 이 표현식인 경우, 생성되는 값은 해당 표현식이 bool 으로 문맥상 변환된 값입니다. 이 변환이 잘못된 경우, 프로그램은 잘못된 형식입니다.

선언

만약 condition 이 단순 선언인 경우, 반환되는 값은 결정 변수의 값(아래 참조)이 bool 으로 문맥상 변환된 값입니다. 만약 해당 변환이 잘못된 경우, 프로그램은 잘못된 형식입니다.

비구조적 바인딩 선언

선언에는 다음과 같은 제한 사항이 있습니다:

  • 구문적으로 다음 형식을 따릅니다:
  • type-specifier-seq declarator = assignment-expression
(C++11 이전)
  • attribute-specifier-seq (선택 사항) decl-specifier-seq declarator brace-or-equal-initializer
(C++11 이후)

선언의 결정 변수는 선언된 변수입니다.

구조화된 바인딩 선언

선언에는 다음과 같은 제한 사항이 있습니다:

선언의 결정 변수는 선언에 의해 도입된 e 발명 변수입니다.

(C++26부터)

설명

A while 문은 다음과 동일합니다

/* label */ :

{

if ( condition )
{
statement
goto /* label */ ;
}

}

만약 condition 이 선언문인 경우, 해당 루프가 반복될 때마다 선언된 변수가 소멸되고 생성됩니다.

루프가 statement 내에서 종료되어야 하는 경우, break statement 를 종료 문으로 사용할 수 있습니다.

현재 반복을 statement 내에서 종료해야 하는 경우, continue statement 를 단축키로 사용할 수 있습니다.

참고 사항

statement 가 복합 문(compound statement)인지 여부와 관계없이, 이는 항상 블록 범위(block scope) 를 도입합니다. 여기서 선언된 변수들은 루프 본문 내에서만 보이며, 즉

while (--x >= 0)
    int i;
// i가 스코프를 벗어남

와 동일합니다

while (--x >= 0)
{
    int i;
} // i가 스코프를 벗어남

C++ 진행 보장 의 일부로서, 사소한 무한 루프 가 아닌 (C++26부터) 관찰 가능한 동작 이 없는 루프가 종료되지 않으면 동작은 정의되지 않음 입니다. 컴파일러는 이러한 루프를 제거할 수 있습니다.

키워드

while

예제

#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 문서 for while