Переключатель
- странная конструкция. Это происходит от C, и Java и C # также приняли его, так что это не считается полностью "не-OO".
состояние включения, которое изменяется, является действительной концепцией ОО, но часто используется для переключения в зависимости от типа.
В частности, компилятор обычно создает таблицу «переходов», что означает, что именно блок O (1) вызывается в отличие от вложенного оператора «if». У вас может быть несколько значений (не считая значения по умолчанию), переходящих к одной и той же точке, поэтому блоки кода "сталкиваются" друг с другом, если вы явно не вставите оператор "break".
Вот как это было сделано в C и сохранено для C ++.
Что касается значения в переключателе, оно должно быть числовым, но не должно быть константой. В вашем случае i++
оценивается как 0, но увеличивает i до 1. Это хорошо определенное поведение, и здесь нет проблем с точками последовательности.