На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: JoeUser, Qraizer, Hsilgos
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Как привести перечисление к типу?
    Цитата OpenGL @
    В плюсах "работает" не является аргументом поскольку в нём есть UB
    Не смешно. В вопросах защиты от невалидных значений не является аргументом как раз неопределённость. Тем более когда вместо типа подсовывается синтаксический прибамбас на простом целом.

    Добавлено
    К тому же это определено.
    ExpandedWrap disabled
      enum EN{q=0, w=1, e=2};
      union
      {
       int x;
       EN en;
      };
      t=44;
      switch (en)
      {
       case q:
       case e:
       case r: return true;
       default: return false;
      }
    должен вернуть фолз.
    Сообщение отредактировано: Ирокез -
      Цитата Ирокез @
      В вопросах защиты от невалидных значений
      Этой защитой в плюсах занимается программист. Задача компилятора - создать максимально быстрый код минимального размера, удовлетворяющий требованиям стандарта. Вы пообещали компилятору, что переменная этого типа будет содержать одно из четырех указанных значений - будьте добры это обеспечить.
      Цитата Ирокез @
      А по-твоему какова разрядность базового типа? 1 бит?
      А по-вашему какова? 8 бит? Или 16? А может 24? Или 64?
        Цитата Dushevny @
        Этой защитой в плюсах занимается программист.
        А я прям не в курсе.

        Добавлено
        Цитата Dushevny @
        Вы пообещали компилятору, что переменная этого типа будет содержать одно из четырех указанных значений - будьте добры это обеспечить.
        Лож. Ничего я ему не обещал. Я потребовал, чтоб количество осмысленных значений равнялось количеству перечисленных имён. О бессмысленных значениях не сказав ему ни слова.

        Добавлено
        Цитата Dushevny @
        А по-вашему какова? 8 бит? Или 16? А может 24? Или 64?
        Минимум 32.

        Добавлено
        Цитата Dushevny @
        одно из четырех указанных значений - будьте добры это обеспечить.
        А ничего, что это не возможно?

        Добавлено
        Не путайте с паскалем, где перечисление обязано гарантировать не производительность кода и не его размер, а невозможность иных значений. На плюсах не только каждое обращение не приводится к вычислению остатка от деления на общее количество перечисленных имён, но и сами коды могут быть произвольными и между ними могут быть дыры.
        Сообщение отредактировано: Ирокез -
          Цитата Ирокез @
          Лож. Ничего я ему не обещал. Я потребовал, чтоб количество осмысленных значений равнялось количеству перечисленных имён. О бессмысленных значениях не сказав ему ни слова.

          В стандарте языка нет понятия бессмысленных значений в перечислениях. Если ты перечисление используешь нестандартным способом - это явный признак плохой архитектуры твоей программы. Научись использовать преимущества языка, а не искать на свой отладчик приключений :lol:
          Мои программные ништякиhttp://majestio.info
            Цитата JoeUser @
            В стандарте языка нет понятия бессмысленных значений в перечислениях.
            Вот именно. Следовательно, стандарт их даже запретить не может.

            Добавлено
            Цитата JoeUser @
            Если ты перечисление используешь нестандартным способом - это явный признак плохой архитектуры твоей программы. Научись использовать преимущества языка,
            И какое же преимущество мне даёт случайность значения неинициированной переменной?
            Цитата JoeUser @
            а не искать на свой отладчик приключений
            Так я и прописал проверку валидности.
              Цитата Ирокез @
              И какое же преимущество мне даёт случайность значения неинициированной переменной?

              При чем тут это? Использование переменной без предварительной инициализации - дурной тон. И ошибка в проектировании.

              Добавлено
              Цитата Ирокез @
              Следовательно, стандарт их даже запретить не может.

              В стандартной библиотеке есть функция прямой записи в память по адресу.
              Но это не означает, что правильно писать от балды куда, и от балды что.
              Типизация языка - это помощь программисту, а не защита от дурака.
              Мои программные ништякиhttp://majestio.info
                Эх, человека забанили. Злыдни <_<
                Вообще, всё зависит от того, чем является чтение невалидного enum-а. Если это unspecified behavior, то компилятор не должен эту функцию до return true редуцировать. Если же это undefined, то редуцирование будет более чем логичным.
                Подпись была включена в связи с окончанием срока наказания
                  Цитата Ирокез @
                  Ты б хоть потестил. Перечисление может принимать любые значения своего базового типа, независимо от того, назначены им имена или нет.
                  Ты б хоть Стандарт почитал. Это перечисление может хранить только 4 элемента.

                  Добавлено
                  Цитата Ирокез @
                  К тому же это определено.
                  ...
                  А это тоже 4 элемента. Для него default имеет смысл.

                  Добавлено
                  Цитата Ирокез @
                  Минимум 32.
                  2 бита.

                  Добавлено
                  OpenGL, unspecified.
                  Одни с годами умнеют, другие становятся старше.
                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script Execution time: 0,1156 ]   [ 15 queries used ]   [ Generated: 21.11.19, 07:53 GMT ]