-2 / 8 / 2
Регистрация: 10.11.2008
Сообщений: 776
|
||||||
1 | ||||||
Объявление внутри switch25.05.2016, 09:52. Показов 4897. Ответов 8
Метки нет (Все метки)
Почему, когда закомментирваны фигурные скобки не получается объявить переменную внутри switch?
0
|
25.05.2016, 09:52 | |
Ответы с готовыми решениями:
8
Объявление переменных внутри блока switch Объявление объекта внутри функции Объявление переменной внутри цикла while gets внутри switch |
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
|
|||||||||||
25.05.2016, 10:05 | 2 | ||||||||||
Кто тебе такое сказал
0
|
0 / 0 / 3
Регистрация: 24.10.2015
Сообщений: 6
|
||||||
25.05.2016, 15:58 | 3 | |||||
Выполнение оператора switch способно переходить через метки case. Когда выполнение переходит к некой метке case, весь расположенный выше код оператора switch будет проигнорирован. Что будет, если пропущен код с объявленной переменной?
Поэтому, недопустим переход с места, где переменная с инициализатором вышла из области видимости к месту, где эта переменная находится в области видимости.
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
25.05.2016, 16:08 | 4 |
0
|
0 / 0 / 3
Регистрация: 24.10.2015
Сообщений: 6
|
||||||
25.05.2016, 16:31 | 5 | |||||
0
|
Вездепух
12793 / 6670 / 1795
Регистрация: 18.10.2014
Сообщений: 16,889
|
||||||
25.05.2016, 16:36 | 6 | |||||
Никаких проблем с объявлением как таковым в этом случае нет. Язык С++ запрещает "прыжки" в область видимости переменной, которые "перепрыгивают" инициализацию. Вот такой код компилироваться не будет
switch : метка default: прыгает в область видимости переменной g , но перепрыгивает инициализацию этой переменной. Дополнительные фигурные скобки устраняют проблему.Прыжки через неинициализированные объявления - разрешены. Если вы в вашем коде замените int g = 8; на раздельное int g; g = 8; , то он будет компилироваться в обоих вариантах (со всеми вытекающими).
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
25.05.2016, 16:50 | 7 |
TheCalligrapher, а есть выдержки с стандарта по вашим тезисам разрешены/не разрешены ?
0
|
0 / 0 / 3
Регистрация: 24.10.2015
Сообщений: 6
|
|
25.05.2016, 17:11 | 8 |
switch statement
http://en.cppreference.com/w/cpp/language/switch
0
|
Вездепух
12793 / 6670 / 1795
Регистрация: 18.10.2014
Сообщений: 16,889
|
|
25.05.2016, 17:32 | 9 |
Разумеется
P.S. Если кому-то будет интересно на досуге, я в свое время отвечал на аналогичный вопрос на SO, где также шла речь об определенных отличиях между С и С++. Язык С разрешает прыжки через инициализацию, однако в С аналог оригинального кода без скобок тоже не будет компилироваться, но совсем по другой, не связанной причине http://stackoverflow.com/quest... 0#19830820
1
|
25.05.2016, 17:32 | |
25.05.2016, 17:32 | |
Помогаю со студенческими работами здесь
9
Ругань на объявление массива внутри класса Пропуск условия if внутри switch Внутри switch ошибка Case bypasses initialization of a local variable Switch case внутри switch case Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |