Многосимвольная константа - это то, чего вы обычно хотите избежать. Допустим, ваша система имеет прямой порядок с 32-разрядной архитектурой. В этом случае 'left'
означает:
('l')+('e'<<8)+('f'<<16)+('t'<<24)
Обратите внимание , что для удобства чтения я опустил приведение к int
за каждым из символов.
Таким образом, многосимвольная константа на самом деле является целым числом.
Однажды я использовал 'BM'
, чтобы проверить первые два байта изображения .bmp, которое я прочитал, чтобы проверить, правильный ли тип файла, но вскоре я решил, что лишние несколько символов, которые я сохраняю, не стоят. Если вы используете систему с прямым порядком байтов или ваш int
имеет другой размер и т. Д. И т. Д., У вас возникнет проблема. Не говоря уже о раздражающем предупреждении компилятора.
Если у вас enum
, обычно есть два случая:
Случай 1 , вам не нужны значения перечисления. В таком случае вы просто оставляете их. Первый из них станет нулевым, а остальное компилятор заполнит постепенно.
Случай 2 , вам нужны эти значения для умной цели. В этом случае вам нужно назначить их один за другим для вашей цели. Например, если вы хотите enum
подсистем вашей программы и вам нужно включить, отключить их, вы можете иметь 1 переменную, которая является или (|
) из enum
значений, таких как:
enum subsystem
{
SUBSYSTEM_1 = 0x0001,
SUBSYSTEM_2 = 0x0002,
SUBSYSTEM_3 = 0x0004,
SUBSYSTEM_4 = 0x0008,
SUBSYSTEM_5 = 0x0010,
/* etc */
};
(забавный факт, знаете ли вы, что C ++ принимает дополнительные ,
после последнего элемента enum
?)
Ни в одном из случаев вам не понадобится странное значение, соответствующее 'left'
. Если вы думаете, что это делает код понятным для чтения, вы можете быть уверены, что имя константы (LEFT
), безусловно, достаточно.