-
Отсутствие автоматического выхода (fall-through): В C++ после выполнения блока
case
управление переходит к следующему блоку, если явно не указан операторbreak
. Это называется “провал” (fall-through). Если не использоватьbreak
, все последующие блоки будут выполнены до конца или до встречи сbreak
.int value = 2; switch (value) { case 1: cout << "Case 1" << endl; // Пропуск break означает, что выполнение пойдет дальше в case 2 case 2: cout << "Case 2" << endl; // Выполнится, даже если value равно 1 break; case 3: cout << "Case 3" << endl; break; default: cout << "Default case" << endl; } // Вывод: // Case 2
-
Использование оператора
break
: Операторbreak
завершает выполнение блокаcase
и передает управление за пределы конструкцииswitch
. Безbreak
все последующие блоки будут выполнены до встречи сbreak
или до концаswitch
.int value = 1; switch (value) { case 1: cout << "Case 1" << endl; break; // завершает выполнение блока case 1 case 2: cout << "Case 2" << endl; break; default: cout << "Default case" << endl; } // Вывод: // Case 1
-
Блок
default
: Блокdefault
выполняется, если ни один из блоковcase
не соответствует значению выражения. Он не обязателен, но полезен для обработки неожиданных значений.int value = 5; switch (value) { case 1: cout << "Case 1" << endl; break; case 2: cout << "Case 2" << endl; break; default: cout << "Default case" << endl; } // Вывод: // Default case
-
Группировка блоков
case
: Можно группировать несколько значенийcase
, если они требуют выполнения одного и того же кода. Для этого просто не указываютbreak
до последнего блока в группе.int value = 1; switch (value) { case 1: case 2: case 3: cout << "Case 1, 2, or 3" << endl; break; default: cout << "Default case" << endl; } // Вывод: // Case 1, 2, or 3
-
Объявление переменных в блоках
case
: В C++ объявления переменных внутри блоковcase
требуют особого внимания. Из-за отсутствия автоматической изоляции блоков возникает необходимость использовать дополнительные фигурные скобки для ограничения области видимости переменной.int value = 1; switch (value) { case 1: { int x = 10; // объявление переменной в блоке case 1 cout << "Case 1, x = " << x << endl; break; } case 2: int y = 20; // ошибка: перескочит декларацию переменной cout << "Case 2, y = " << y << endl; break; default: cout << "Default case" << endl; } // Вывод: // Case 1, x = 10
-
Диапазоны и сложные условия в
case
: В стандарте C++ не поддерживаются диапазоны и сложные условия в блокахcase
. Для таких случаев необходимо использовать вложенные конструкцииif
.int value = 10; switch (value) { case 1 ... 5: // это вызовет синтаксическую ошибку cout << "Value between 1 and 5" << endl; break; default: if (value >= 6 && value <= 10) { cout << "Value between 6 and 10" << endl; } else { cout << "Value outside range" << endl; } } // Вывод: // Value between 6 and 10