Promoções integrais
Os objetos de um tipo integral podem ser convertidos em outro tipo integral mais amplo (isto é, um tipo que pode representar um conjunto maior de valores). Esse tipo amplo de conversão é chamado de "promoção integral". Com a promoção integral, você pode usar o seguinte em uma expressão sempre que outro tipo integral puder ser usado:
Objetos, literais e constantes do tipo char e short int
Tipos de enumeração
int campos de bits
Enumeradores
As promoções C++ são "preservadoras de valores". Ou seja, o valor após a promoção tem a garantia de ser o mesmo que o valor anterior da promoção. Nas promoções de preservação de valores, objetos de tipos integrais mais curtos (como campos de bits ou objetos do tipo char) são promovidos para o tipo int se int puder representar a gama completa do tipo original. Se int não puder representar o intervalo completo de valores, o objeto será promovido para o tipo unsigned int. Embora essa estratégia seja a mesma usada por ANSI C, as conversões de preservação de valores não preservam o "signedness" do objeto.
As promoções de preservação de valores e as promoções que preservam o signedness normalmente geram os mesmos resultados. Porém, elas poderão gerar resultados diferentes se o objeto promovido for um dos seguintes:
Um operando de /, %, /=, %=, <, <=, > ou >=
Esses operadores dependem do sinal para determinar o resultado. Portanto, as promoções de preservação de valores e de sinais geram resultados diferentes quando aplicadas a esses operandos.
O operando esquerdo de >> ou de >>=
Esses operadores tratam quantidades assinadas e não assinadas de maneiras diferentes ao executar uma operação de alternância. Para quantidades assinadas, alternar uma quantidade para a direita faz com que o bit de sinal seja propagado para posições de bits vagas. Para quantidades não assinadas, as posições de bit vagas são preenchidas com zeros.
Um argumento para uma função ou um operando sobrecarregado de um operador sobrecarregado que depende de signedness do tipo desse operando para a correspondência do argumento. (Consulte Operadores sobrecarregados para obter mais informações sobre como definir operadores sobrecarregados.)