case Something: { } break;
От: Belegel  
Дата: 16.09.02 10:31
Оценка:
Всем привет!

В операторе switch() нельзя объявлять переменные. Иногда это не очень удобно (хотя вполне терпимо).

Вот, недавно увидел такую конструкцию:

switch(value)
{
    case CONST1:
    {
         int i = 0;
         MyClass c(something);

         // ...
    }
    break;

    case CONST2:
    {
         // ...
    }
    break;

    // ...
}

Вопрос такой: На сколько это все безопасно, и нет ли здесь каких-нибудь подводных камней (вроде увеличения времени выполнения кода)?

Заранее спасибо.
Belegel.
Re: case Something: { } break;
От: orangy Россия
Дата: 16.09.02 10:36
Оценка: 3 (1)
Здравствуйте 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 >>
"Develop with pleasure!"
Re: case Something: { } break;
От: dupamid Россия  
Дата: 16.09.02 11:27
Оценка:
Здравствуйте Belegel, Вы писали:

B>В операторе switch() нельзя объявлять переменные. Иногда это не очень удобно (хотя вполне терпимо).


По Стандарту в switch можно объявить переменную:

int f();

int main()
{
    switch(int i = f())
    {
    case 1:
    case 2:
        // ...
        ;
    }
}


Если имелось ввиду в блоке switch, то про это уже ответили.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.