-
Отсутствие автоматического выхода (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