Я сделал простую программу и скомпилировал ее с помощью GCC 4.4/4.5 следующим образом:
int main ()
{
char u = 10;
char x = 'x';
char i = u + x;
return 0;
}
g++ -c -Wconversion a.cpp
И у меня есть следующее:
a.cpp: In function ‘int main()’:
a.cpp:5:16: warning: conversion to ‘char’ from ‘int’ may alter its value
То же предупреждение, которое я получил для следующего кода:
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
Может ли кто-нибудь объяснить мне, почему добавление двух символов (или двух неподписанных шорт) вызывает int? Это ошибка компилятора или стандартная совместимость?
Спасибо.