Меня смущают правила, касающиеся этого вопроса [хороший URL-адрес может сэкономить время при ответе]. Я заметил, что большая часть времени неявно работает, но в других случаях это требуется.
например. Я ожидал, что это сработает:
long long a;
int b;
[..]
a = b * 1000;
но оказывается, переполняется 'a' и требуется
a = (long long) b * 1000;
Это было странно, так как «а» - «большой», я ожидал, что это будет беспокоить.
В любом случае, кроме этого примера, знаете ли вы исчерпывающий источник информации по этому вопросу? Нет, «в большинстве случаев все в порядке», это сводит меня с ума.
РЕДАКТИРОВАТЬ: это только вопрос «вторая часть выполняет вычисления в первую очередь и там они переполняются, следуйте этому правилу внимательно»?
РЕДАКТИРОВАТЬ 2: Если есть вычисления, такие как
long long a;
int b;
short c;
[..]
c = b + a * 3;
, будет делать
c = b + (int) a * 3;
обеспечить правильное преобразование?
или понадобится
c = (short) b + (int) a * 3;
или, будет ли достаточно
c = (short) b + a * 3;