Por que o operador postfix ++ tem precedência mais alta que o operador prefix +

Definido desta maneira, não podemos fazer nem++x++ nem++x--. Mas por outro lado, ambos(++x)++ e(++x)-- são expressões úteis:(++x)++ incrementosx por dois e retorna o valor "no meio", enquanto(++x)-- é essencialmente equivalente ax+1, mas evita completamente ligar paraoperator+, que às vezes pode ser bastante úti

Então, por que a precedência não está definida para ter++x++ expanda automaticamente para(++x)++ ao invés de++(x++)? Existe algum significado oculto para o último que eu não entendo, ou é apenas para manter a precedência em uma lista simples, com todos os operadores de prefixo formando um único níve

EDITA Ok, eu não disse isso explicitamente, mas: é claro que eu quis dizerx para ser do tipo definido pelo usuário. Para tipos internos,(x+=2)-1 é obviamente melhor que(++x)++ ex+1 é ummuit melhor que(++x)--. A situação que tenho em mente é um iterador para um tipo bastante complicado de contêiner semi-associativo, em que operadores+= e+ (sendo projetado para acesso aleatório) precisa reconstruir um cache para funcionar com eficiência em solicitações gerais e, portanto, é uma ordem de magnitude mais lenta que++. Mas é claro que posso modificá-los para sempre verificar primeiro se o argumento é um número inteiro muito pequeno e, nesse caso, basta chamaroperator++ repetidamente em vez de executar o procedimento de acesso aleatório. Isso deve funcionar bem aqui, embora eu possa imaginar que, em algum momento, tenha uma situação na qual eu querooperator+= para sempre seguir o caminho de acesso aleatório, independentemente de quão pequeno número eu a apresent

Então ... para mim, gostaria de concluir a resposta:

a vantagem de ter uma lista de precedências simples e memorizável na qualtodo operadores postfix vêm antesqualque dos operadores de prefixo é suficiente para tolerar a menor desvantagem de sempre ter que usar parênteses para compor operadores pré e pós-fixos++/--, como essa composição é usada muito raramente.

O "C faz assim" mais simples, embora pareça provável que seja orea motivo, é muito menos satisfatório para mim, porque desde++x++ não foi permitidoem absolut em C teria sido possível redefinir essa composição sem danificar nenhum código existent

De qualquer forma, vou continuar usando(++x)--, como os parênteses realmente não doem tant

questionAnswers(3)

yourAnswerToTheQuestion