while
loop
Ejecuta condicionalmente una sentencia de forma repetida.
Contenidos |
Sintaxis
attr
(opcional)
while (
condición
)
sentencia
|
|||||||||
| attr | - | (since C++11) cualquier número de atributos |
| condition | - | una condición |
| statement | - | una sentencia (normalmente una sentencia compuesta) |
Condición
Una condición puede ser una expresión o una declaración simple .
|
(since C++26) |
- Si puede resolverse sintácticamente como una expresión, se trata como una expresión. De lo contrario, se trata como una declaración que no es una declaración de enlace estructurado (since C++26) .
Cuando el control alcanza la condición, la condición producirá un valor, que se utiliza para determinar si statement será ejecutado.
Expresión
Si condition es una expresión, el valor que produce es el valor de la expresión convertido contextualmente a bool . Si esa conversión es incorrecta, el programa está mal formado.
Declaración
Si condition es una declaración simple, el valor que produce es el valor de la variable de decisión (ver abajo) convertido contextualmente a bool . Si esa conversión es incorrecta, el programa está mal formado.
Declaración de enlace no estructurado
La declaración tiene las siguientes restricciones:
- Se ajusta sintácticamente a la siguiente forma:
|
(hasta C++11) |
|
(desde C++11) |
- El declarador no puede especificar una function o un array .
- La type specifier sequence (until C++11) declaration specifier sequence solo puede contener especificadores de tipo y constexpr , y (since C++11) no puede definir una class o una enumeration .
La variable de decisión de la declaración es la variable declarada.
Declaración de enlace estructuradoLa declaración tiene las siguientes restricciones:
La variable de decisión de la declaración es la variable inventada e introducida por la declaración . |
(desde C++26) |
Explicación
Una while es equivalente a
/* label */
:
|
|||||||||
Si condición es una declaración, la variable que declara se destruye y se crea con cada iteración del bucle.
Si el bucle necesita ser terminado dentro de statement , una break statement puede ser usada como sentencia de terminación.
Si la iteración actual necesita ser terminada dentro de statement , se puede usar una continue statement como atajo.
Notas
Independientemente de si statement es una sentencia compuesta, siempre introduce un block scope . Las variables declaradas en él solo son visibles en el cuerpo del bucle, en otras palabras,
while (--x >= 0) int i; // i sale del ámbito
es lo mismo que
while (--x >= 0) { int i; } // i sale del ámbito
Como parte de la garantía de progreso de C++, el comportamiento es undefined si un bucle que no es un trivial infinite loop (since C++26) sin observable behavior no termina. Los compiladores pueden eliminar dichos bucles.
Palabras clave
Ejemplo
#include <iostream> int main() { // bucle while con una sola sentencia int i = 0; while (i < 10) i++; std::cout << i << '\n'; // bucle while con una sentencia compuesta int j = 2; while (j < 9) { std::cout << j << ' '; j += 2; } std::cout << '\n'; // bucle while con una condición de declaración char cstr[] = "Hello"; int k = 0; while (char c = cstr[k++]) std::cout << c; std::cout << '\n'; }
Salida:
10 2 4 6 8 Hello
Véase también
|
Documentación de C
para
while
|