Namensräume
Varianten
Aktionen

while-Schleife

Von cppreference.com
< cpp‎ | Sprache
 
 
C++ Sprache
Allgemeine Themen
Kontrollfluss
Bedingte Ausführungsaussagen
if
Iterationsanweisungen (Schleifen)
for
Bereichs-for (C++11)
while
do-while
Sprunganweisungen
Funktionen
Funktionsdeklaration
Lambda-Funktionsausdruck
inline-Spezifizierer
Dynamische Ausnahmespezifikationen (bis C++17*)
noexcept-Spezifizierer (C++11)
Ausnahmen
Namensräume
Typen
Spezifizierer
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Speicherdauer-Spezifizierer
Initialisierung
Ausdrücke
Alternative Darstellungen
Literale
Boolesch - Ganzzahl - Gleitkommazahl
Zeichen - String - nullptr (C++11)
Benutzerdefinierte (C++11)
Dienstprogramme
Attribute (C++11)
Typen
typedef-Deklaration
Typalias-Deklaration (C++11)
Umwandlungen
Speicherzuweisung
Klassen
Klassenspezifische Funktionseigenschaften
explicit (C++11)
static

Spezielle Member-Funktionen
Templates
Sonstiges
 
 

Führt eine Anweisung bedingt wiederholt aus.

Inhalt

[bearbeiten] Syntax

attr (optional) while ( Bedingung ) Anweisung
attr - (seit C++11) eine beliebige Anzahl von Attributen
condition - eine Bedingung
Anweisung - eine Anweisung (typischerweise eine zusammengesetzte Anweisung)

[bearbeiten] Bedingung

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

(seit C++26)
  • Wenn sie syntaktisch als Ausdruck aufgelöst werden kann, wird sie als Ausdruck behandelt. Andernfalls wird sie als Deklaration behandelt, die keine strukturierte Bindungsdeklaration ist(seit C++26).

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

[bearbeiten] Ausdruck

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

[bearbeiten] Deklaration

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

[bearbeiten] Nicht-strukturierte Bindungsdeklaration

Die Deklaration hat folgende Einschränkungen

  • Folgt syntaktisch 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 hat folgende Einschränkungen

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

(seit C++26)

[bearbeiten] Erklärung

Eine while-Anweisung ist äquivalent zu

/* Label */ :

{

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

}

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

Wenn die Schleife innerhalb von statement beendet werden muss, kann eine break-Anweisung als beendende Anweisung verwendet werden.

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

[bearbeiten] Anmerkungen

Unabhängig davon, ob Anweisung eine zusammengesetzte Anweisung ist, führt sie immer einen Block-Scope ein. Darin deklarierte Variablen sind nur im Schleifenkörper sichtbar, mit anderen Worten:

while (--x >= 0)
    int i;
// i goes out of scope

ist dasselbe wie

while (--x >= 0)
{
    int i;
} // i goes out of scope

Als Teil 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.

[bearbeiten] Schlüsselwörter

while

[bearbeiten] Beispiel

#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';
}

Ausgabe

10
2 4 6 8
Hello

[bearbeiten] Siehe auch

C-Dokumentation für while