Оператор switch, нужен ли break после метки default?

292
19 марта 2017, 06:10

Какой смысл в операторе break после метки default, если оператор switch после default итак завершает свою работу?

Часто вижу примеры, как с break так и без после default:

switch(number)
{
  case 0: cout << "Too small.\n";  break;
  case 1: cout << "One.\n";  break;
  case 2: cout << "Two.\n"; break;       
  case 3: cout << "Three.\n"; break;
  default: cout << "Too large.\n"; 
  break; // какой смысл в этом break?
}
Answer 1

Синтаксически, нет необходимости в самом последнем break, причём неважно в какой секции он находится.

switch(number)
{
  case 1: cout << 1; break;
  case 2: cout << 2; break;       
  default:
  case 0: cout << "Мало"; break;
  case 3: cout << "Много"; /*break;*/
}

По сути, break - это goto на позицию сразу за фигурной скобкой. (А continue на позицию перед ней, но только в циклах)
В этом свете, очевидна излишнесть этого оператора.

Однако, этот break всё ещё может быть полезен, если список случаев (case) может изменяться в будущем.
При наличии всех break сложнее ошибиться и получить вот такую ошибку:

switch(number)
{
  case 1: cout << 1; break;
  case 2: cout << 2; break;       
  default:
  case 0: cout << "Мало"; break;
  case 3: cout << 3;         // При добавлении строчки, забыли добавить пропущенный break
  case 4: cout << "Много";
}

Это становится более актуальным, если секции не такие тривиальные, и просто окинув взглядом switch не сразу понятно, что к чему относится.

READ ALSO
как переписать класс C# на C++/cli [требует правки]

как переписать класс C# на C++/cli [требует правки]

помогите пожалуйста перевести код

246
c++ снифер не видит GET запросы

c++ снифер не видит GET запросы

Скачал где-то пример снифераОн базируется на ioctlsocket( s, SIO_RCVALL, & flag ) Вопрос, почему снифер не ловит GET запросы, а ловит лишь ответы? Может ли он ловить...

257
Как в C++ использовать код на Go?

Как в C++ использовать код на Go?

Добрый день! Подскажите, как использовать функции из Go в программе на C++? Буду благодарен за простой и доступный пример

288
Выбор каждый раз нового элемента из массива

Выбор каждый раз нового элемента из массива

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

326