Desempenho de pIter! = Cont.end () em loop

Eu estava passando por "Exceptional C ++" por Herb Sutter ultimamente, e tenho sérias dúvidas sobre uma determinada recomendação que ele dá no Item 6 - Objetos Temporários.

Ele oferece para encontrar objetos temporários desnecessários no seguinte código:

string FindAddr(list<Employee> emps, string name) 
{
  for (list<Employee>::iterator i = emps.begin(); i != emps.end(); i++)
  {
    if( *i == name )
    {
      return i->addr;
    }
  }
  return "";
}

Como um dos exemplos, ele recomenda prever o valor deemps.end() antes do loop, já que há um objeto temporário criado em cada iteração:

Para a maioria dos containers (incluindo list), chamar end () retorna um objeto temporário que deve ser construído e destruído. Como o valor não mudará, recomputar (e reconstruí-lo e redistribui-lo) em cada iteração de loop é desnecessariamente ineficiente e inestético. O valor deve ser calculado apenas uma vez, armazenado em um objeto local e reutilizado.

E ele sugere substituir pelo seguinte:

list<Employee>::const_iterator end(emps.end());
for (list<Employee>::const_iterator i = emps.begin(); i != end; ++i)

Para mim, isso é uma complicação desnecessária. Mesmo se um substitui declarações de tipo feias com o compactoauto, ele ainda recebe duas linhas de código em vez de uma. Ainda mais, ele tem esseend variável no escopo externo.

Eu tinha certeza que os compiladores modernos vão otimizar este pedaço de código de qualquer maneira, porque eu estou realmente usandoconst_iterator aqui e é fácil verificar se o conteúdo do loop está acessando o contêiner de alguma forma. Compiladores ficaram mais inteligentes nos últimos 13 anos, certo?

De qualquer forma, vou preferir a primeira versão comi != emps.end() na maioria dos casos, onde não estou muito preocupado com o desempenho. Mas eu quero saber com certeza, se este é um tipo de construção que eu poderia confiar em um compilador para otimizar?

Atualizar

Obrigado por suas sugestões sobre como melhorar este código inútil. Por favor note, minha pergunta é sobre compilador, não técnicas de programação. As únicas respostas relevantes para agora são deNPE eEllioh.

questionAnswers(7)

yourAnswerToTheQuestion