#cpp
Где эффективно можно использовать перечисления enum?
Ответы
Ответ 1
Enum представляет из себя набор связных констант. На основании этого, сразу становится ясно что лучше заводить для констант отдельный список enum nums {ONE,TWO, THREE,FOUR}; чем просто объявлять целочисленные переменные так const int one = 0,two = 1,three = 2,four = 3; И уж во всяком случае, лучше чем это #define ONE 1 #define TWO 2 #define THREE 3 #define Four 4 Также, c enum чтение кода становится более понятным например при передачи значений в функцию int func(nums n, nums m); Чем просто так int func(const int n,const int m); Конечно, можно определять свои значения констант enum Params {WIDTH = 100, HEIGHT = 200}; И тогда очень удобно в различных участках кода, их группировать enum room1 {LEFT = 20, RIGHT = 70, TOP = 50}; enum colors {RED = 5, GREEN = 20, BLACK = 50}; В общем, использование enum, добавит вашему коду понятность, красоту и читабельность.Ответ 2
Основным достоинством перечислений является повышение читаемости кода. Поэтому эффективно использовать их там, где естественным образом возникают перечисления: описания дней недели, названий месяцев, и т.д. Интересные примеры по перечислениям: C++ enums.Ответ 3
Там, где нужно создать последовательный ряд целочисленных констант, составляющих смысловую последовательность. На скорости выполнения программы они не оказывают существенного влияния по сравнению с обычными константами.Ответ 4
Чтобы enum'ы не захламляли пространство имён, лучше подписывать начало типа к названию констант: enum Color {Color_Red, Color_Green, Color_Blue}; Color gr=Color_Green;Ответ 5
На перечислениях можно делать битовые маски смотри тут https://stackoverflow.com/questions/24066170/how-to-create-ns-options-style-bitmask-enumerations-in-swift примеры или гугли bitmask enum Так же название говорит само за себя. Там где нужно ограниченное перечисление. Наприме в Unreal Engine мне потребовалось через Enum указывать какую ось 3d вектора изменять при нажатии определённой кнопки. Есть перечисление namespace EAxis { enum Type { None, X, Y, Z, None, X, Y, Z, } } И я передавал значение в функции , например если нужно было изменить объект по оси X .OnClicked(this, &FeditorModeEdModeToolkit::OnButtonAxis, EAxis::Type::X, 2) Перечисления это константы и их хорошо оптимизирует компилятор
Комментариев нет:
Отправить комментарий