while
loop
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.
|
(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:
|
(bis C++11) |
|
(seit C++11) |
- Der Deklarator darf keinen function oder ein array spezifizieren.
- Die type specifier sequence (bis C++11) declaration specifier sequence darf nur Typ-Spezifizierer und constexpr enthalten, und sie (seit C++11) darf keine class oder enumeration definieren.
Die Entscheidungsvariable der Deklaration ist die deklarierte Variable.
Strukturierte BindungsdeklarationDie 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 */
:
|
|||||||||
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
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
|
C-Dokumentation
für
while
|