Passando std :: string como parâmetro

Este protocolo é uma nota para eu não esquecer:

  1. Usando a string como um id (não será modificado). Passá-lo por referência const é provavelmente a melhor ideia aqui: (std :: string const &)

  2. Modificando a string, mas não querendo que o chamador veja essa mudança. Passá-lo por valor é preferível: (std :: string)

  3. Modificando a string, mas querendo que o chamador veja a mudança. Passá-lo por referência é preferível: (std :: string &)

  4. Enviar a string para a função e o chamador da função nunca mais usará a string. Usar a semântica de movimento pode ser uma opção (std :: string &&)

Fonte: http://stackoverflow.com/a/10789797/1996540