C ++ и CONST: как использовать UINT32 в месте определения типа FLAG и использовать флаг CONST FLAG; внутри структуры? онг - PullRequest
0 голосов
/ 02 августа 2010

Я новичок в программировании на C ++. Я анализирую код и обнаружил следующее:

typedef unsigned short UINT16;
typedef unsigned long UINT32;
typedef UNIT16 FLAG;

//within a structure,
struct x
{
      const FLAG& flag; //what this means??
};

Когда я изменяю тип данных FLAG на UNIT32, тогда FLAG & возвращает другое значение, которое я предполагаю. Если я использую FLAG вместо FLAG &, то он ведет себя правильно.

Пожалуйста, помогите мне понять вышесказанное.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 августа 2010

flag является членом const, так что он может быть только инициализирован, но не назначен, если в него не вовлечено приведение. То, какие результаты вы получите, зависит от того, с чем вы его инициализируете, и чего не показываете.

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

Вы упомянули, что вы получили разные результаты с FLAG и FLAG &, что указывает на то, что вы инициализируете его переменной, и тогда переменная меняется. Учитывая больше контекста, мы могли бы предоставить больше деталей.

Теперь, если вы предоставили реальный код, между UINT16 и UINT32 нет никакой разницы, поскольку вы определили их обоих как unsigned short. Не должно быть никакой разницы в поведении. Если это так, это означает, что вы предоставляете не только недостаточно кода, чтобы знать, что происходит, но и код, отличный от того, от которого вы на самом деле получаете свои результаты.

0 голосов
/ 02 августа 2010

CONST не является частью C ++, я думаю, это какой-то макрос.

FLAG & flag;

создаст ссылку на объект-флаг. Точно то, что код означает / делает, невозможно сказать без дополнительной информации.

...