В этом куске кода:
signed char v = -64;
int n = 4;
int x = v - '0' * (signed char)n;
std::cout << x << std::endl;
Должно ли x
быть -5
или -261
? В моем понимании выражение инициализатора имеет тип signed char
, и преобразование типа должно произойти позже, после того, как инициализатор вычислен.
Итак, v - '0' * (signed char)n
должно быть равно -5
, потому что это эквивалентно -261
в оценке signed char
.
Однако этот фрагмент кода печатает -261
.