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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Jetu
касаткО
51 / 51 / 1
Регистрация: 01.10.2011
Сообщений: 227
#1

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

14.03.2013, 17:41. Просмотров 507. Ответов 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 уже не входит в диапозон ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2013, 17:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перечисления (C++):

Перечисления - C++
Добрый день, проблема в том чтобы использовать запись вида enum values { 2,3,4,5,6,7,8,9,10,J,Q,K,A } компилятор ругается на...

Перечисления.. - C++
страна(Германия,Куба,Бирма,Монако,Непал,Польша,Кения) континент(Азия,Америка,Европа,Африка) страна s; континент k; По названия...

Перечисления в классах - C++
Не могу понять почему в классах работают перечисления? Я не могу в классе обьявить константу, но я могу ее за менить перечислением вроде...

Задание на перечисления - C++
Напишите программу,которая сначала по первой букве должности,введенной пользователем, определяет соответствующие значение переменной,...

Получить значение перечисления - C++
День добрый, форумчане. Имею такое перечисление: public enum OrdStatuses { New = '0', PartiallyFilled = '1',...

Структуры, Объединения, Перечисления - C++
Реализовать программу для хранения информации о студентах одного потока. Предусмотреть следующие поля: ФИО, группа. Для иногородних...

1
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.03.2013, 00:08 #2
Потому что выбирается первый попавшийся целочисленный тип, в который влазят все значения констант. Какой именно — зависит от реализации, лишь бы все значения были им представимы. Поэтому для вашего value может быть выбран хоть char, хоть unsigned long, хоть int. Естественно, в этом случае появляется куча значений, которые можно присвоить подобной переменной, но которые не равны ни одной из констант перечисления. Этой фичей иногда пользуются, поэтому в Си++ 1) её решили не убирать, оставив константы перечислений фактически числами, а не символьными значениями (буквально именами); 2) в соответствии с принципом нулевой стоимости, неявные проверки на вхождение присваиваемого значения множеству констант перечисления не выполняются (кто пользуется данной фичей, тот и делает явные проверки, если думает, что не сможет пользоваться аккуратно; хотя компиляторы могут выдавать предупреждения в данном случае).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2013, 00:08
Привет! Вот еще темы с ответами:

Перечисления заданного типа - C++
Если в С++ сделать enum operation = {plus, minus, mult, div}; То перечисляемые константы буду иметь тип operation. А если мне...

Cтруктуры. Перечисления. Объединения - C++
Вот у меня закончилась тема функции и началась СТРУКТУРЫ. ПЕРЕЧИСЛЕНИЯ. ОБЪЕДИНЕНИЯ. прочитав лекцию я так и не понял что от меня...

Размер перечисления enum - C++
Добрый день. Где-то я вычитал, что размер перечисления не всегда может быть одинаковый. Из чего вопрос, как зафиксировать размер...

Выбор геометрических фигур из перечисления - C++
Что необходимо написать для того что бы ввести потом 1,2,3 или 4 и выбрать соответсвующую фигуру? Задача: Вычислите площадь...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru