Учитывая это перечисление и назначение:
enum Points {point2d = 2, point2w, point3d = 3, point3w};
Points pt3d = point3d;
В точке останова сразу после этого назначения отладчик сообщает, что pt3d имеет значение point2w. Почему не point3d, как назначено?
enum
это просто способ установить причудливые, скомпилированные безопасные имена типов времени для перечислений. Что происходит, так это то, что каждому из ваших значений перечисления присваивается числовое целочисленное значение:
enum Points
{
// Explicitly map point2d to value 2.
point2d = 2,
// Let point2w get an automatic mapping - will be previous + 1 = 3.
point2w,
// Explicitly map pint3d to value 3.
point3d = 3,
// Let point3w get an automatic mapping - will be previous + 1 = 4.
point3w
}
Так что во время выполнения, заявление Points pt3d = point3d
такой же как Points pt3d = 3
, При отображении отладчик просто принимает первое перечисленное значение, сопоставленное againts 3, которое point2w
,
enum Points {point2d = 2, point2w, point3d = 3, point3w};
Points pt3d = point3d;
Когда вы не установите значение, как для point2w
, продолжать увеличивать, то с point2d = 2
, point2w
будет равно 3 вроде point3d
, point3w
будет равно 4, потому что point3d
установлено на 3.
Вы должны прочитать это о перечислении.
Надеюсь, это поможет вам.