Присвоение перечислителя типу перечисления с перечислителями с одинаковым значением

Учитывая это перечисление и назначение:

enum Points {point2d = 2, point2w, point3d = 3, point3w};
Points pt3d = point3d;

В точке останова сразу после этого назначения отладчик сообщает, что pt3d имеет значение point2w. Почему не point3d, как назначено?

1

Решение

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,

2

Другие решения

enum Points {point2d = 2, point2w, point3d = 3, point3w};
Points pt3d = point3d;

Когда вы не установите значение, как для point2w, продолжать увеличивать, то с point2d = 2, point2w будет равно 3 вроде point3d, point3w будет равно 4, потому что point3d установлено на 3.

Вы должны прочитать это о перечислении.

Надеюсь, это поможет вам.

2

По вопросам рекламы [email protected]