Форум программистов, компьютерный форум CyberForum.ru

Перечисления - C++

Восстановить пароль Регистрация
 
Jetu
касаткО
 Аватар для Jetu
51 / 51 / 1
Регистрация: 01.10.2011
Сообщений: 227
14.03.2013, 17:41     Перечисления #1
Здравствуйте. Возник вопрос по использованию перечилсений в С++. Есть код:
C++
1
2
3
4
5
6
7
8
9
enum value {x = 1, y = 2, z = 4, e = 8};
 
int main(int argc, const char * argv[])
{
    value e1 = value(1000);
    std::cout<< e1<< std::endl;
   
    return 0;
}
Насколько я знаю, если перечисленные элементы не отрицательны, то диапозон их значений равен [0;(2^k) - 1], где k - наименьшая степень двойки, для которой все элементы перечисления попадают в необходимый диапазаон, то есть в нашем случае получается, что диапозон от 0 до 15. Почему, тогда компилятор "съел" строчку
C++
1
value e1 = value(1000);
ведь 1000 уже не входит в диапозон ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2013, 17:41     Перечисления
Посмотрите здесь:

Задание на перечисления C++
Cтруктуры. Перечисления. Объединения C++
Объединения, поля битов, перечисления C++
C++ Перечисления..
Перечисления C++
Перечисления. Переменная не входит в диапазон C++
Структуры, Объединения, Перечисления C++
C++ Выбор геометрических фигур из перечисления

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.03.2013, 00:08     Перечисления #2
Потому что выбирается первый попавшийся целочисленный тип, в который влазят все значения констант. Какой именно — зависит от реализации, лишь бы все значения были им представимы. Поэтому для вашего value может быть выбран хоть char, хоть unsigned long, хоть int. Естественно, в этом случае появляется куча значений, которые можно присвоить подобной переменной, но которые не равны ни одной из констант перечисления. Этой фичей иногда пользуются, поэтому в Си++ 1) её решили не убирать, оставив константы перечислений фактически числами, а не символьными значениями (буквально именами); 2) в соответствии с принципом нулевой стоимости, неявные проверки на вхождение присваиваемого значения множеству констант перечисления не выполняются (кто пользуется данной фичей, тот и делает явные проверки, если думает, что не сможет пользоваться аккуратно; хотя компиляторы могут выдавать предупреждения в данном случае).
Yandex
Объявления
15.03.2013, 00:08     Перечисления
Ответ Создать тему
Опции темы

Текущее время: 17:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru