Объявление string в switch приводит к ошибке "cannot jump from switch statement to this case label"
1,00
р.
р.
Обнаружил для себя такую неожиданную вещь: код switch (a) { case 1: std::string alfa break case 2: break default: break } не компилируется из-за объявления переменной класса string. Компилятор выдает, что не может прыгнуть к следующей метке: 1.cpp:16:9: error: cannot jump from switch statement to this case label default: ^ Но почему так? Почему, если объявить, например, переменную типа int, то все в порядке?
Ответ Смотрите - а что ему делать, если вы получите a==2 и при этом решите в ветви обратиться к этой переменной alfa? Инициализировать ее? нет? Во избежание таких фокусов - перепрыгивания через инициализацию - это считается ошибкой. Просто возьмите переменную в фигурные скобки, чтоб ограничить область видимости: switch (a) { case 1: { std::string alfa } break case 2: break default: break }