Вопрос 1: Зависит от компилятора. Стандарт C ++ не требует установки таблицы переходов.
Во многих случаях, особенно при небольшом числе редких случаев, GCC, MSVC и другие компиляторы будут выполнять проверку по пунктам (как если бы это было оператором if). В качестве примера, предположим, что ваши случаи были 1, 15 и 1000000. Было бы неэффективно выполнять код с прямым переходом.
gcc имеет опцию -fno-jump-tables
, чтобы заставить его создать эквивалентный список if-else.
Вопрос 2: оператор break не требуется для последнего предложения. Он должен быть опущен, если выполнение должно быть прекращено.