Всем привет!
В операторе switch() нельзя объявлять переменные. Иногда это не очень удобно (хотя вполне терпимо).
Вот, недавно увидел такую конструкцию:
switch(value)
{
case CONST1:
{
int i = 0;
MyClass c(something);
// ...
}
break;
case CONST2:
{
// ...
}
break;
// ...
}
Вопрос такой: На сколько это все безопасно, и нет ли здесь каких-нибудь подводных камней (вроде увеличения времени выполнения кода)?
Заранее спасибо.
Belegel.
Здравствуйте Belegel, Вы писали:
B>В операторе switch() нельзя объявлять переменные. Иногда это не очень удобно (хотя вполне терпимо).
Дело не в том, что "нельзя" потому, что нельзя. Проблема возникает в том случае, когда switch обходит инициализацию объекта. Та же ерунда для goto

Решение — ввести локальный scope для объекта
switch (a)
{
case 1:
{
A a; // у этой переменной scope - локальный блок, она умрёт при выходе из него
}
break;
case 2:
// здесь уже нет a
break;
default:
{
B a; // а здесь "a" другая
}
break;
}
... << J 1.0 alpha 4 >>
Здравствуйте Belegel, Вы писали:
B>В операторе switch() нельзя объявлять переменные. Иногда это не очень удобно (хотя вполне терпимо).
По Стандарту в switch можно объявить переменную:
int f();
int main()
{
switch(int i = f())
{
case 1:
case 2:
// ...
;
}
}
Если имелось ввиду в блоке switch, то про это уже ответили.