Namespaces
Variants

break statement

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
continue - break
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

Provoca que el bucle for , range-for , while o do-while envolvente o la sentencia switch terminen.

Se utiliza cuando resulta incómodo terminar el bucle utilizando la expresión de condición y las sentencias condicionales.

Contenidos

Sintaxis

attr  (opcional) break ;
attr - (since C++11) cualquier número de attributes

Explicación

Solo aparece dentro de la sentencia del cuerpo de un bucle ( while , do-while , for ) o dentro de la sentencia de un switch . Después de esta sentencia, el control se transfiere a la sentencia inmediatamente posterior al bucle o switch envolvente. Como en cualquier salida de bloque, todos los objetos de almacenamiento automático declarados en la sentencia compuesta envolvente o en la condición de un bucle/switch se destruyen, en orden inverso a su construcción, antes de la ejecución de la primera línea siguiente al bucle envolvente.

Notas

Una sentencia break no puede utilizarse para salir de múltiples bucles anidados. La sentencia goto puede utilizarse para este propósito.

Palabras clave

break

Ejemplo

#include <iostream>
int main()
{
    int i = 2;
    switch (i)
    {
        case 1: std::cout << "1";   // <---- posible advertencia: fall through
        case 2: std::cout << "2";   // la ejecución comienza en esta etiqueta case (+advertencia)
        case 3: std::cout << "3";   // <---- posible advertencia: fall through
        case 4:                     // <---- posible advertencia: fall through
        case 5: std::cout << "45";  //
                break;              // la ejecución de sentencias subsiguientes termina
        case 6: std::cout << "6";
    }
    std::cout << '\n';
    for (char c = 'a'; c < 'c'; c++)
    {
        for (int i = 0; i < 5; i++)      // solo este bucle se ve afectado por break
        {                                //
            if (i == 2)                  //
                break;                   //
            std::cout << c << i << ' ';  //
        }
    }
    std::cout << '\n';
}

Salida posible:

2345
a0 a1 b0 b1

Véase también

(C++17)
indica que la caída desde la etiqueta de caso anterior es intencional y no debe ser diagnosticada por un compilador que advierte sobre caídas
(especificador de atributo)