flag
является членом const
, так что он может быть только инициализирован, но не назначен, если в него не вовлечено приведение. То, какие результаты вы получите, зависит от того, с чем вы его инициализируете, и чего не показываете.
flag
- это ссылка (&
), поэтому она не сохраняет свое собственное значение, а хранит значение из другого места. Ссылка - это просто другое имя для другой переменной (или, возможно, значение, если это const
ref). Если вы инициализируете его, например, с переменной i
, то это будет другое имя для i
. Если значение i
изменяется, значение flag
изменяется. const
означает, что ничто в x
не может изменить его напрямую, а также то, что значение не может быть изменено. Опять же, без информации об инициализации, которую вы делаете, невозможно объяснить, что происходит.
Вы упомянули, что вы получили разные результаты с FLAG
и FLAG &
, что указывает на то, что вы инициализируете его переменной, и тогда переменная меняется. Учитывая больше контекста, мы могли бы предоставить больше деталей.
Теперь, если вы предоставили реальный код, между UINT16
и UINT32
нет никакой разницы, поскольку вы определили их обоих как unsigned short
. Не должно быть никакой разницы в поведении. Если это так, это означает, что вы предоставляете не только недостаточно кода, чтобы знать, что происходит, но и код, отличный от того, от которого вы на самом деле получаете свои результаты.