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

Führt eine Anweisung bedingt wiederholt aus.

Inhaltsverzeichnis

Syntax

attr  (optional) while ( condition ) statement
attr - (since C++11) beliebige Anzahl von attributes
condition - eine condition
statement - eine statement (typischerweise eine zusammengesetzte Anweisung)

Bedingung

Eine Bedingung kann entweder ein Ausdruck oder eine einfache Deklaration sein.

  • Wenn es syntaktisch als eine structured binding -Deklaration aufgelöst werden kann, wird es als eine structured binding-Deklaration interpretiert.
(since C++26)
  • Wenn es syntaktisch als Ausdruck aufgelöst werden kann, wird es als Ausdruck behandelt. Andernfalls wird es als Deklaration behandelt die keine strukturierte Bindungsdeklaration ist (seit C++26) .

Wenn die Steuerung die Bedingung erreicht, ergibt die Bedingung einen Wert, der verwendet wird, um zu bestimmen, ob statement ausgeführt wird.

Ausdruck

Wenn condition ein Ausdruck ist, ist der von ihm gelieferte Wert der Wert des Ausdrucks, der kontextuell zu bool konvertiert wird. Wenn diese Konvertierung fehlerhaft ist, ist das Programm fehlerhaft.

Deklaration

Wenn condition eine einfache Deklaration ist, ist der von ihr gelieferte Wert der Wert der Entscheidungsvariablen (siehe unten), kontextuell konvertiert zu bool . Wenn diese Konvertierung fehlerhaft ist, ist das Programm fehlerhaft.

Nicht-strukturierte Bindungsdeklaration

Die Deklaration unterliegt folgenden Einschränkungen:

  • Syntaktisch entspricht es der folgenden Form:
  • type-specifier-seq declarator = assignment-expression
(bis C++11)
  • attribute-specifier-seq (optional) decl-specifier-seq declarator brace-or-equal-initializer
(seit C++11)

Die Entscheidungsvariable der Deklaration ist die deklarierte Variable.

Strukturierte Bindungsdeklaration

Die Deklaration unterliegt folgenden Einschränkungen:

Die Entscheidungsvariable der Deklaration ist die eingeführte Variable e , die durch die Deklaration eingeführt wird .

(seit C++26)

Erklärung

Eine while -Anweisung entspricht

/* label */ :

{

if ( Bedingung )
{
Anweisung
goto /* label */ ;
}

}

Wenn condition eine Deklaration ist, wird die deklarierte Variable mit jeder Iteration der Schleife zerstört und neu erstellt.

Wenn die Schleife innerhalb der Anweisung beendet werden muss, kann eine break Anweisung als abschließende Anweisung verwendet werden.

Wenn die aktuelle Iteration innerhalb einer statement beendet werden muss, kann eine continue statement als Abkürzung verwendet werden.

Hinweise

Unabhängig davon, ob statement ein zusammengesetzter Ausdruck ist, führt es immer einen block scope ein. Variablen, die darin deklariert werden, sind nur im Schleifenkörper sichtbar, mit anderen Worten,

while (--x >= 0)
    int i;
// i geht außerhalb des Gültigkeitsbereichs

ist dasselbe wie

while (--x >= 0)
{
    int i;
} // i geht außerhalb des Gültigkeitsbereichs

Im Rahmen der C++ Fortschrittsgarantie ist das Verhalten undefiniert , wenn eine Schleife , die keine triviale Endlosschleife ist (seit C++26) ohne beobachtbares Verhalten nicht terminiert. Compiler dürfen solche Schleifen entfernen.

Schlüsselwörter

while

Beispiel

#include <iostream>
int main()
{
    // while-Schleife mit einer einzelnen Anweisung
    int i = 0;
    while (i < 10)
         i++;
    std::cout << i << '\n';
    // while-Schleife mit einer zusammengesetzten Anweisung
    int j = 2;
    while (j < 9)
    {
        std::cout << j << ' ';
        j += 2;
    }
    std::cout << '\n';
    // while-Schleife mit einer Deklarationsbedingung
    char cstr[] = "Hello";
    int k = 0;
    while (char c = cstr[k++])
        std::cout << c;
    std::cout << '\n';
}

Ausgabe:

10
2 4 6 8
Hello

Siehe auch