GOOGLE ADS

viernes, 22 de abril de 2022

¿Por qué no se pueden declarar las variables en una declaración de cambio?

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

CaseLas 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 switchdeclaració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 casedeclaració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

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...