Loop baseado em intervalo de C ++ 11: obter item por valor ou referência a const

Lendo alguns exemplos de loops baseados em intervalos, eles sugerem duas formas principais 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 
}

ou

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

Bem.

Quando não precisamos de mudarvec itens, IMO, Exemplos sugerem usar segunda versão (por valor). Por que eles não sugerem algo queconst Referências (Pelo menos eu não encontrei nenhuma sugestão direta):

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 
}

Não é melhor? Não evita uma cópia redundante em cada iteração enquanto é umaconst?

questionAnswers(4)

yourAnswerToTheQuestion