![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| KL7 |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 7.12.2008 Где: Minsk City Репутация: нет Всего: 2 |
Вопрос адресован к знающим людям, мнение которых хотелось бы услышать...
Вопрос касается скорее "грамотности" написания года... Вопрос предполагается в контексте С++, поскольку в java enum-ы - ето что по истине нечто страшное, а где еще они бывают, я не знаю... Ситуация проста: нужно иметь в своем распоряжении константу... Если ето как-то меняет дело, то будем считать, что константа находится внутри класса... Известные мне варианты реализации:
Варианты похоже не сильно различаются в плане использования, но суть все же разная... Какой вариант предпочтительнее и почему? Я правда не ожидаю, что у обычной константы могут быть явные преимущества, так что скорее интересуют доводы в пользу перечислений... Пока я для себя решил (можете переубедить), что если мне нужно несколько однотипных констант, например, для размеров шрифта, то предпочтительнее реализовать ето через перечисления:
Такие константы вероятно будут использоваться в качестве аргументов и будет не плохо, если компилятор позаботится о том, чтобы в функции передавались только ети три значения, а не просто что-нибудь целочисленное... Но что если нужна просто одиночная константа, скажем значение по умолчанию для ширины окна... В такой ситуации есть какие-либо преимущества у перечислений? Стоит ли все константы класса поместить в неименованный enum? Буду рад услышать любое обоснованное мнение... |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
константы - когда нужен тип, перечисления - когда тип не нужен
|
|||
|
||||
| Alca |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
|
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не согласен. |
|||
|
||||
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
mes, а обосновать?
Alca, говоря "тип" я имел ввиду то что в случае const short x = 1; у x будет тип short, а в случае enum E { .... . x=1, ... } у x тип будет эквивалентен int в случаях когда константа должна иметь конкретный тип, с конкретным sizeof, отличный от других типов, надо использовать константы, а там где это не надо - проще и удобнее перечисления Добавлено через 5 минут и 40 секунд например для формирования пакета надо записать в поток id пакета длиной байт можно написать
а можно написать
так вот в этом случае нужно чтобы константа имела конкретный тип, поэтому лучше 1й вариант |
||||
|
|||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
enum имеет тип int
Это сообщение отредактировал(а) Alca - 4.8.2009, 20:29 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
подтип.
Это сообщение отредактировал(а) mes - 4.8.2009, 20:49 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
KL7, это индивидуальный стиль каждого программиста, ты должен сам видеть и понимать,, что и где тебе нужно. Нет четких правил, которые бы стоило уяснить и использовать, так что используй воображение и свои предпочтения.
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
1. указатель на константу можно передать в функцию. указатель на элемент энама - нет
2. глобальная константа "загрязяет" глобальное пространство имен для линковщика. неименованный енум, вроде, не загрязняет в остальном они очень похожи |
|||
|
||||
| andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 6 Всего: 33 |
И чем это грозит? -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
| Dmi3ev |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1698 Регистрация: 28.11.2007 Репутация: 1 Всего: 41 |
вот тут enum меня выручил, а static const int нельзя было применить...
http://forum.vingrad.ru/forum/topic-263382/0.html а если можно юзать и то, и другое, то сам смотри... принципиальной разницы я не вижу... -------------------- |
|||
|
||||
| KL7 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 7.12.2008 Где: Minsk City Репутация: нет Всего: 2 |
как и ожидалось вопрос не однозначный...
спасибо, GoldFinch, про потребность конкретного типа у константы я усвоил... кто что еще может ценного сказать?
что-то я как и azesmcar так и не понял, чем же там константа не угодила... вероятно конфликтами одноименных констант... так-то оно так, но если писать код только как хочется, то может так оказаться, что потом с етим кодом будет стыдно в приличном обществе показаться =) вот и интересуюсь... |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
По умолчанию (без слова extern) const подразумевает внутреннюю компоновку. Так что константа, определённая в глобальном пространстве имён является локальной для той единицы компиляции, в которой она определена. Это сообщение отредактировал(а) zim22 - 5.8.2009, 08:39 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Насчет "нужности" типа перечисления уже была дискуссия
http://forum.vingrad.ru/forum/topic-257983...tml#st_0_view_0 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |