Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpPmCdFT 119 of 390 menu
◀ ▶

Необязательность break в C++

Команда break является необязательной. Без нее, однако, поведение блоков case будет неожиданным. Давайте посмотрим на примере. Пусть у нас есть вот такой код:

int num = 1; switch (num) { case 1: std::cout << 1 << "\n"; break; case 2: std::cout << 2 << "\n"; break; case 3: std::cout << 3 << "\n"; break; }

Уберем в нем все break, а в переменную num для начала запишем число 3.

Пока все будет работать так, как и работало:

int num = 3; // пусть здесь число 3 switch (num) { case 1: std::cout << 1 << "\n"; case 2: std::cout << 2 << "\n"; case 3: std::cout << 3 << "\n"; } // после запуска код выведет 3 - все хорошо

Давайте теперь в переменную num запишем число 2. В этом случае у нас ожидаемо выполнится case 2, а затем неожиданно еще и case 3:

int num = 2; switch (num) { case 1: std::cout << 1 << "\n"; case 2: std::cout << 2 << "\n"; case 3: std::cout << 3 << "\n"; } // после запуска код выведет 2, а затем 3

Если же в переменную num записать число 1, то вообще выполнятся все конструкции case:

int num = 1; switch (num) { case 1: std::cout << 1 << "\n"; case 2: std::cout << 2 << "\n"; case 3: std::cout << 3 << "\n"; } // после запуска код выведет 1, затем 2, а затем 3

То есть получается, что при отсутствии break после выполнения задуманного case выполнятся и все case ниже него. Иногда такую особенность используют при решении задач.

В следующем примере, если переменная num имеет значение 1 или 2, то в переменную res запишется "a". Если же переменная num имеет значение 3, то в переменную res запишется "b":

int num = 1; std::string res; switch (num) { case 1: case 2: res = "a"; break; case 3: res = "b"; break; } std::cout << res << "\n";

Выше я написал, что иногда такую особенность используют, но я, в общем-то, не рекомендую ей пользоваться, так как код становится не очень очевидным.

Очевиднее решить такую задачу через ифы:

int num = 1; std::string res; if (num == 1 || num == 2) { res = "a"; } if (num == 3) { res = "b"; } std::cout << res << "\n";
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить