Oleg_SK
01-12-2008, 11:08
Начал изучать язык C++, и дойдя до перечислений столкнулся с непонятной для себя ситуацией при присвоении значения переменной, имеющей тип: перечисление. Как я понимаю, перечисления нужны для создания новых типов переменных, для которых четко задано то множество значений, которое им можно присваивать. Ниже я приведу факты, которые не укладываются в мое представление. Например, возьмем следующий код:
enum COLOR {test_1, test_2, test_3, test_4, test_5};
, который создает новый тип-перечисление COLOR и задает для него пять возможных значений. Теперь по идее, если создать переменную с типом COLOR, ей можно будет присвоить только одно из этих пяти значений, а попытка присвоить какое-либо отличное значение должно привести к ошибке. Верно я понимаю? Идем дальше: каждой константе перечисления соответствует определенное целочисленное значение. Например:
test_1 - 0
test_2 - 1
test_3 - 2
test_4 - 3
test_5 - 4
Таким образом, по идее, если я создам переменную с типом COLOR:
COLOR vartest;
, то в последствии смогу присвоить ей лишь те значения, которые указывались при описании перечисления. Например так:
vartest = test_5;
, или так:
vartest = (COLOR) 4;
Никаких проблем при этом, как и следовало ожидать, не возникает. Непонятка возникает в том случае, если присвоить переменной vartest значение, которое не было указано при описании перечисления COLOR. Дело в том, что компилятор не считает такой код ошибочным (при компиляции нет ни ошибок, ни предупреждений), и действительно в процессе работы программы переменной vartest присваивается левое значение... Например:
vartest = (COLOR) 1000;
Мне хотелось бы знать: это я не правильно понимаю суть работы с перечислениями, или компилятор (Visual C++ 6.0)? Почему компилятор не пресекает подобные действия?
enum COLOR {test_1, test_2, test_3, test_4, test_5};
, который создает новый тип-перечисление COLOR и задает для него пять возможных значений. Теперь по идее, если создать переменную с типом COLOR, ей можно будет присвоить только одно из этих пяти значений, а попытка присвоить какое-либо отличное значение должно привести к ошибке. Верно я понимаю? Идем дальше: каждой константе перечисления соответствует определенное целочисленное значение. Например:
test_1 - 0
test_2 - 1
test_3 - 2
test_4 - 3
test_5 - 4
Таким образом, по идее, если я создам переменную с типом COLOR:
COLOR vartest;
, то в последствии смогу присвоить ей лишь те значения, которые указывались при описании перечисления. Например так:
vartest = test_5;
, или так:
vartest = (COLOR) 4;
Никаких проблем при этом, как и следовало ожидать, не возникает. Непонятка возникает в том случае, если присвоить переменной vartest значение, которое не было указано при описании перечисления COLOR. Дело в том, что компилятор не считает такой код ошибочным (при компиляции нет ни ошибок, ни предупреждений), и действительно в процессе работы программы переменной vartest присваивается левое значение... Например:
vartest = (COLOR) 1000;
Мне хотелось бы знать: это я не правильно понимаю суть работы с перечислениями, или компилятор (Visual C++ 6.0)? Почему компилятор не пресекает подобные действия?