Declarando variables dentro de bucles, ¿buenas prácticas o malas prácticas?

Pregunta 1 ¿Declarar una variable dentro de un bucle es una buena práctica o una mala práctica?

He leído los otros hilos sobre si existe o no un problema de rendimiento (la mayoría dijo que no), y que siempre debe declarar las variables tan cerca de donde se van a utilizar. Lo que me pregunto es si esto debería evitarse o no, o si realmente es preferible.

Ejemplo

for(int counter = 0; counter <= 10; counter++)
{
   string someString = "testing";

   cout << someString;
}

Pregunta 2 ¿La mayoría de los compiladores se dan cuenta de que la variable ya ha sido declarada y simplemente omiten esa parte, o en realidad crea un lugar para ella en la memoria cada vez?

Respuestas a la pregunta(4)

Su respuesta a la pregunta