A adição de dois caracteres produz int
Eu criei um programa simples e o compilei com o GCC 4.4 / 4.5 da seguinte maneira:
int main ()
{
char u = 10;
char x = 'x';
char i = u + x;
return 0;
}
g ++ -c -Wconversion a.cpp
E eu tenho o seguinte:
a.cpp: In function ‘int main()’:
a.cpp:5:16: warning: conversion to ‘char’ from ‘int’ may alter its value
O mesmo aviso que recebi para o seguinte código:
unsigned short u = 10;
unsigned short x = 0;
unsigned short i = u + x;
a.cpp: In function ‘int main()’:
a.cpp:5:16: warning: conversion to ‘short unsigned int’ from ‘int’ may alter its value
Alguém poderia me explicar por que a adição de dois caracteres (ou dois shorts não assinados) produz int? É um bug do compilador ou é compatível com o padrão?
Obrigado.