C ++ 11 rango basado en bucle: obtener elemento por valor o referencia a const

Leyendo algunos ejemplos de bucles basados ​​en rangos, sugieren dos formas principales 1, 2, 3, 4

std::vector<MyClass> vec;

for (auto &x : vec)
{
  // x is a reference to an item of vec
  // We can change vec's items by changing x 
}

o

for (auto x : vec)
{
  // Value of x is copied from an item of vec
  // We can not change vec's items by changing x
}

Bien.

Cuando no necesitamos cambiarvec Elementos, IMO, los ejemplos sugieren utilizar la segunda versión (por valor). ¿Por qué no sugieren algo queconst Referencias (Al menos no he encontrado ninguna sugerencia directa):

for (auto const &x : vec) // <-- see const keyword
{
  // x is a reference to an const item of vec
  // We can not change vec's items by changing x 
}

¿No es mejor? ¿No evita una copia redundante en cada iteración mientras que es unaconst?

Respuestas a la pregunta(4)

Su respuesta a la pregunta