Это не своп. c
присваивается то же значение, что и code
, а затем это значение присваивается обратно code
. Исходное значение code
потеряно.
Мы можем видеть это, потому что unsigned char c
(обычно) намного меньше, чем unsigned int code
, и некоторая информация может быть потеряна, если вставить значение в code
в c
.
Например, code
= 257. После c = code;
code
по-прежнему 257 и c
, при условии, что 8-битный char
будет равен 1. После code = c;
оба code
и c
будет 1. 257. было потеряно.
Почему это делается? если дано char
, operator<<
будет распечатывать закодированный символ, полностью игнорируя запрос на печать как hex
, dec
или oct
. Так что
<< "\n decimal: " << setw(3) << dec << c
потрачено впустую. Учитывая, что int
<<
будет учитывать модификаторы, но если c
и code
имеют разные значения, вы сравниваете яблоки и Sasquatches.