Bueno, ciertamente es una buena práctica restringir el alcance de las variables tanto como sea posible. Son menos propensos a ser reutilizados innecesariamente, y es más probable que los defina cuando los declara, lo que evita errores debido a variables indefinidas y cosas por el estilo. También hay muchos casos en los que tienes un objeto que hace algo mientras está construido y cuando se destruye, y quieres abarcarlo (por ejemplo, el reloj de arena en MFC se muestra mientras su objeto existe y desaparece cuando se destruye en MFC ; los objetos para bloquear y desbloquear mutex son otro buen ejemplo), y en tales casos, el alcance de las variables con llaves tiene sentido. Por lo tanto, hay muchos casos en los que tiene sentido crear bloques de código específicamente para variables de ámbito.
Sin embargo, hay algunos problemas para hacer esto en exceso.
Puede ser difícil de leer si tiene muchos bloques de código dentro de una función.
Si intenta demasiado a fondo las variables lo más posible, se encontrará con problemas al declarar variables que necesitan un alcance mayor antes de lo que lo haría y no siempre puede definirlas al declararlas.
Las funciones a menudo expresan lo que intenta hacer mucho mejor.
Por lo tanto, el uso de llaves adicionales para variables de ámbito puede ser una buena práctica (reduciendo el ámbito de las variables tanto como sea razonablemente posible, sin duda lo es), pero en muchos casos, es mucho mejor para romper el código en múltiples funciones . El código puede ser mucho más fácil de entender cuando tienes funciones con nombre que bloques arbitrarios de código. Entonces, si está en una posición en la que desea declarar muchos bloques de código separados dentro de una función, considere dividirlo en varias funciones; esto es especialmente cierto si cada uno de esos bloques está directamente dentro de la función en lugar de anidado más. Por lo tanto, los casos de
T func(...)
{
{
...
}
{
...
}
}
probablemente se dividan mejor en funciones múltiples que bloques separados.
Ciertamente hay momentos en que los bloques separados pueden ser buenos y útiles, pero generalmente las funciones separadas serían mejores.