Os fatos:
i ++ e ++ i são igualmente fáceis de ler. Você não gosta de um porque não está acostumado a isso, mas não há essencialmente nada que possa interpretá-lo como errado, portanto, não há mais trabalho de ler ou escrever.
Em pelo menos alguns casos, o operador postfix será menos eficiente.
No entanto, em 99,99% dos casos, não importa porque (a) estará agindo de um modo simples ou primitivo de qualquer maneira e é apenas um problema se estiver copiando um objeto grande (b) não estará em um desempenho parte crítica do código (c) você não sabe se o compilador irá otimizá-lo ou não, isso pode acontecer.
Portanto, sugiro o uso do prefixo, a menos que você precise especificamente do postfix, seja um bom hábito, apenas porque (a) é um bom hábito ser preciso com outras coisas e (b) uma vez na lua azul, você pretende usar o postfix e entenda errado: se você sempre escreve o que quer dizer, é menos provável. Sempre há uma troca entre desempenho e otimização.
Você deve usar seu bom senso e não otimizar micro até que você precise, mas nem ser flagrantemente ineficiente por causa disso. Normalmente, isso significa: primeiro, exclua qualquer construção de código que seja inaceitavelmente ineficiente, mesmo em código não crítico de tempo (normalmente algo que representa um erro conceitual fundamental, como passar objetos de 500 MB por valor sem motivo); e segundo, de qualquer outra maneira de escrever o código, escolha a mais clara.
No entanto, aqui, acredito que a resposta é simples: acredito que escrever prefixo, a menos que você precise especificamente do postfix seja (a) muito marginalmente mais claro e (b) muito marginalmente mais propenso a ser mais eficiente; portanto, você sempre deve escrever isso por padrão, mas não se preocupe se você esquecer.
Seis meses atrás, pensei o mesmo que você, que o i ++ era mais natural, mas é exatamente o que você está acostumado.
EDIÇÃO 1: Scott Meyers, em "C ++ mais eficaz", em que geralmente confio nessa coisa, diz que você geralmente deve evitar o uso do operador postfix em tipos definidos pelo usuário (porque a única implementação sadia da função de incremento do postfix é fazer um cópia do objeto, chame a função de incremento de prefixo para executar o incremento e retorne a cópia, mas as operações de cópia podem ser caras).
Portanto, não sabemos se existem regras gerais sobre (a) se isso é verdade hoje, (b) se isso também se aplica (menos) aos tipos intrínsecos (c) se você deve usar "++" em qualquer coisa além de uma classe de iterador leve de todos os tempos. Mas, por todos os motivos que descrevi acima, não importa, faça o que eu disse antes.
EDIT 2: Refere-se à prática geral. Se você acha que isso importa em algum exemplo específico, deve analisá-lo e ver. A criação de perfil é fácil, barata e funciona. Deduzir, desde os primeiros princípios, o que precisa ser otimizado é difícil, caro e não funciona.
i++
antes de saber que isso poderia afetar o desempenho++i
, então mudei. No começo, o último parecia um pouco estranho, mas depois de um tempo eu me acostumei e agora parece tão natural quantoi++
.