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

Вызывает завершение объемлющего цикла for , range-for , while или do-while либо оператора switch .

Используется, когда неудобно завершать цикл с помощью условного выражения и условных операторов.

Содержание

Синтаксис

attr  (необязательно) break ;
attr - (since C++11) любое количество атрибутов

Объяснение

Появляется только внутри инструкции тела цикла ( while , do-while , for ) или внутри инструкции оператора switch . После этой инструкции управление передаётся инструкции, следующей непосредственно за охватывающим циклом или оператором switch. Как и при любом выходе из блока, все автоматические объекты хранения, объявленные в охватывающем составном операторе или в условии цикла/switch, уничтожаются в порядке, обратном порядку их создания, перед выполнением первой строки, следующей за охватывающим циклом.

Примечания

Оператор break не может использоваться для выхода из нескольких вложенных циклов. Для этой цели может использоваться оператор goto .

Ключевые слова

break

Пример

#include <iostream>
int main()
{
    int i = 2;
    switch (i)
    {
        case 1: std::cout << "1";   // <---- возможно предупреждение: fall through
        case 2: std::cout << "2";   // выполнение начинается с этой метки case (+предупреждение)
        case 3: std::cout << "3";   // <---- возможно предупреждение: fall through
        case 4:                     // <---- возможно предупреждение: fall through
        case 5: std::cout << "45";  //
                break;              // выполнение последующих операторов прерывается
        case 6: std::cout << "6";
    }
    std::cout << '\n';
    for (char c = 'a'; c < 'c'; c++)
    {
        for (int i = 0; i < 5; i++)      // только этот цикл затрагивается break
        {                                //
            if (i == 2)                  //
                break;                   //
            std::cout << c << i << ' ';  //
        }
    }
    std::cout << '\n';
}

Возможный вывод:

2345
a0 a1 b0 b1

Смотрите также

(C++17)
указывает, что переход к следующей метке case является преднамеренным и не должен диагностироваться компилятором, который предупреждает о сквозном выполнении
(спецификатор атрибута)
C documentation для break