Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.107.161] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Не смешно. В вопросах защиты от невалидных значений не является аргументом как раз неопределённость. Тем более когда вместо типа подсовывается синтаксический прибамбас на простом целом.
Добавлено К тому же это определено. 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; } |
Сообщ.
#17
,
|
|
|
Цитата Ирокез @ Этой защитой в плюсах занимается программист. Задача компилятора - создать максимально быстрый код минимального размера, удовлетворяющий требованиям стандарта. Вы пообещали компилятору, что переменная этого типа будет содержать одно из четырех указанных значений - будьте добры это обеспечить. В вопросах защиты от невалидных значений А по-вашему какова? 8 бит? Или 16? А может 24? Или 64? |
Сообщ.
#18
,
|
|
|
Цитата Dushevny @ А я прям не в курсе. Этой защитой в плюсах занимается программист. Добавлено Цитата Dushevny @ Лож. Ничего я ему не обещал. Я потребовал, чтоб количество осмысленных значений равнялось количеству перечисленных имён. О бессмысленных значениях не сказав ему ни слова.Вы пообещали компилятору, что переменная этого типа будет содержать одно из четырех указанных значений - будьте добры это обеспечить. Добавлено Цитата Dushevny @ Минимум 32. А по-вашему какова? 8 бит? Или 16? А может 24? Или 64? Добавлено Цитата Dushevny @ А ничего, что это не возможно? одно из четырех указанных значений - будьте добры это обеспечить. Добавлено Не путайте с паскалем, где перечисление обязано гарантировать не производительность кода и не его размер, а невозможность иных значений. На плюсах не только каждое обращение не приводится к вычислению остатка от деления на общее количество перечисленных имён, но и сами коды могут быть произвольными и между ними могут быть дыры. |
Сообщ.
#19
,
|
|
|
Цитата Ирокез @ Лож. Ничего я ему не обещал. Я потребовал, чтоб количество осмысленных значений равнялось количеству перечисленных имён. О бессмысленных значениях не сказав ему ни слова. В стандарте языка нет понятия бессмысленных значений в перечислениях. Если ты перечисление используешь нестандартным способом - это явный признак плохой архитектуры твоей программы. Научись использовать преимущества языка, а не искать на свой отладчик приключений |
Сообщ.
#20
,
|
|
|
Цитата JoeUser @ Вот именно. Следовательно, стандарт их даже запретить не может. В стандарте языка нет понятия бессмысленных значений в перечислениях. Добавлено Цитата JoeUser @ И какое же преимущество мне даёт случайность значения неинициированной переменной? Если ты перечисление используешь нестандартным способом - это явный признак плохой архитектуры твоей программы. Научись использовать преимущества языка, Цитата JoeUser @ Так я и прописал проверку валидности. а не искать на свой отладчик приключений |
Сообщ.
#21
,
|
|
|
Цитата Ирокез @ И какое же преимущество мне даёт случайность значения неинициированной переменной? При чем тут это? Использование переменной без предварительной инициализации - дурной тон. И ошибка в проектировании. Добавлено Цитата Ирокез @ Следовательно, стандарт их даже запретить не может. В стандартной библиотеке есть функция прямой записи в память по адресу. Но это не означает, что правильно писать от балды куда, и от балды что. Типизация языка - это помощь программисту, а не защита от дурака. |
Сообщ.
#22
,
|
|
|
Эх, человека забанили. Злыдни
Вообще, всё зависит от того, чем является чтение невалидного enum-а. Если это unspecified behavior, то компилятор не должен эту функцию до return true редуцировать. Если же это undefined, то редуцирование будет более чем логичным. |
Сообщ.
#23
,
|
|
|
Цитата Ирокез @ Ты б хоть Стандарт почитал. Это перечисление может хранить только 4 элемента. Ты б хоть потестил. Перечисление может принимать любые значения своего базового типа, независимо от того, назначены им имена или нет. Добавлено Цитата Ирокез @ А это тоже 4 элемента. Для него default имеет смысл. К тому же это определено. ... Добавлено Цитата Ирокез @ 2 бита. Минимум 32. Добавлено OpenGL, unspecified. |