Tengo curiosidad por insertar el descanso dentro de un corchete en un caso.
int a = 1; switch (a) { case 1: { a = a; break; } a = a; case 2: { a = a; } break; }En el código de C++ anterior, en el caso 1, inserté el salto dentro de los corchetes, ¿es un error?
¿Hay alguna diferencia entre el caso 1 y el caso 2 en el ejemplo anterior?
¿Hay alguna diferencia entre el caso 1 y el caso 2 en el ejemplo anterior?
En términos de la ejecución del código y el comportamiento de la instrucción break , no. De este Borrador C++17 Estándar :
9.6.1 La sentencia break [stmt.break]
1 La instrucción break debe ocurrir solo en una declaración de iteración o una declaración de
switchy causa la terminación de la declaración de iteración o declaración deswitchmás pequeña que la contiene; el control pasa a la sentencia que sigue a la sentencia terminada, si la hay.
Por lo tanto, cualquier ámbito envolvente 'extra' (bloques delimitados por { ... } ) es irrelevante: la break operará en el primer switch (o declaración de iteración) que el compilador encuentre en una 'búsqueda externa' desde donde se coloca. (Tenga en cuenta que lo mismo es cierto para una declaración de break dentro del alcance de un bloque if : eso aún saldrá del bloque de switch que lo contiene o del ciclo while / for ).