С точки зрения практики кодирования, в каких контекстах глобальные константы предпочитают перечисление и наоборот?Глобальные константы против перечисления
Например, предположим, что мне нужен способ выразить различные спрайты на плитки в глобальном масштабе. Я мог бы сделать ...
const int TILE_RED = 0;
const int TILE_GREEN = 1;
const int TILE_BLUE = 2;
const int TILE_CENTER = 3;
const int TILE_TOP = 4;
const int TILE_TOPRIGHT = 5;
const int TILE_RIGHT = 6;
const int TILE_BOTTOMRIGHT = 7;
const int TILE_BOTTOM = 8;
const int TILE_BOTTOMLEFT = 9;
const int TILE_LEFT = 10;
const int TILE_TOPLEFT = 11;
или
enum Tile { TILE_RED, TILE_GREEN, TILE_BLUE, TILE_CENTER, TILE_TOP, TILE_TOPRIGHT
TILE_RIGHT, TILE_BOTTOMRIGHT, TILE_BOTTOM, TILE_BOTTOMLEFT, TILE_LEFT, TILE_TOPLEFT };
Очевидно, что мы предпочитаем постоянные и перечислений в макрос, но то, что о том, когда дело доходит до констант и перечислений? Какие ситуации предпочитают что? Я читал here, что постоянные объекты представляют небольшой риск сделать вашу программу медленнее, но я хотел бы услышать мысли других.
Я использовал этот пример, в частности, потому что это большой набор связанных объектов - пижама кошки для перечисления.
«Неявные перечисления могут вызывать некоторые проблемы совместимости с платформой» - примеры, пожалуйста. Также, что вы подразумеваете под «безопасным типом» и как глобальные константы больше? –
«Не явный» просто означает, что перечисления не имеют типа. Проблема совместимости с платформой была обнаружена в ящиках Linux, и для этого было сделано исправление. Хороший компилятор сообщит об этом вам, если вы попытаетесь скрыть листинг const. – aviraldg
Не могли бы вы указать некоторую информацию о исправлении совместимости платформы libc, о котором вы упоминали? Я хотел бы узнать об этом. –