-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


Язык для обучения программированию

Пятница, 21 Августа 2020 г. 20:55 + в цитатник
Qraizer:
Цитата korvin @
Не знаю, что за заморочки с enum'ами у вас там в C++, но во многих других языках, enum — это просто конечное множество литералов с, опционально, приаттаченными к ним какими-то свойствами и получить массив всех значений enum'ного типа не представляет никакой проблемы.
Угу. Но в C/C++ это не так. С подобными перечислениями:
    enum
    {
    RED,
    GREEN,
    BLUE,
    GRAY
    };
архитектурных проблем не возникает, но вот с подобными:
    enum
    {
    RED = 1,
    GREEN = 2,
    BLUE = 4,
    GRAY =-1
    };
всплывает целый комплекс проблем. По Стандарту C++ валидными значениями для этого перечисления будут [-8...7]. Неожиданно? И неважно, что только четыре из них имеют идентификаторы. Причём это касается только дополнительного кодирования целых, для других вариантов диапазон будет [-7...7], и определяется это как поведение, зависящее от реализации, в данном случае от архитектуры исполнительного устройства. Внимание – вопрос: когда программист хочет коллекцию элементов перечисления, какой из этих двух вариантов он имеет в виду? Валидные значения или-таки явным образом определённые идентификаторы? Внимание – вопрос 2: когда он к GREEN делает ++, он хочет следующее значение или следующий идентификатор? А если к BLUE? А если к GRAY... или -- к RED? А когда он выводит их в поток, он реально хочет увидеть "RED" на выходе? А если вводит, например, из файла, то "Red" подойдёт как значение, кодируемое 1? А если он русский, выставил себе std::locale("ru_RU.UTF8") и хочет видеть "КРАСНЫЙ"?
Где, в каком Стандарте и как именно это всё прописывать? А главное — зачем вообще пытаться натягивать сову на глобус, если перечисления всегда были предназначены для представления в коде дискретных входов. Даже название "перечисление" говорит, что это просто список значений. Режимы работы стиральной машины, каналы ТВ, список форсмажорных обстоятельств в договоре, типы внешних интерфейсов в ПК, список поддерживаемых движком графических API... А то, что язык позволяет с ними ещё и дополнительные выкрутасы вытворять, так это просто бонус. Мол, хотите юзать, на здоровье, под вашу ответственность.
Меня тут пытаются подвести под обвинение за слишком узкий взгляд на программирование в связи с моим крайне лояльным отношением к C++ и более прохладным отношением к остальным языкам. По факту же наоборот, это пока единственный встретившийся мне язык, который не сосредотачивается на популизме масс в контексте популярности трендов, а ориентирован на программирование с точки зрения научного подхода к IT.

https://forum.sources.ru/index.php?showtopic=419241&view=findpost&p=3837427

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку