Siempre me he preguntado esto: ¿por qué no puede declarar variables después de una etiqueta de caso en una declaración de cambio? En C++ puede declarar variables prácticamente en cualquier lugar (y declararlas cerca del primer uso es obviamente algo bueno), pero lo siguiente aún no funcionará:
switch (val)
{
case VAL:
// This won't work
int newVal = 42;
break;
case ANOTHER_VAL:
...
break;
}
Lo anterior me da el siguiente error (MSC):
la inicialización de 'newVal' se omite por la etiqueta 'case'
Esto parece ser una limitación en otros idiomas también. ¿Por qué es este un problema?
Solución del problema
Case
Las declaraciones son solo etiquetas. Esto significa que el compilador interpretará esto como un salto directo a la etiqueta. En C++, el problema aquí es de alcance. Sus corchetes definen el alcance como todo lo que está dentro de la switch
declaración. Esto significa que le queda un alcance en el que se realizará un salto más en el código omitiendo la inicialización.
La forma correcta de manejar esto es definir un alcance específico para esa case
declaración y definir su variable dentro de ella:
switch (val)
{
case VAL:
{
// This will work
int newVal = 42;
break;
}
case ANOTHER_VAL:
...
break;
}
No hay comentarios:
Publicar un comentario