какое значение по умолчанию для переменной enum - PullRequest
216 голосов
/ 11 февраля 2011

Переменная enum, кто-нибудь знает, всегда ли она имеет значение по умолчанию для первого элемента?

Ответы [ 2 ]

347 голосов
/ 11 февраля 2011

Это любой член перечисления, представляющий значение 0. В частности, из документации :

Значением по умолчанию enum E является значение, полученное выражением (E)0.

В качестве примера возьмем следующее перечисление:

enum E
{
    Foo, Bar, Baz, Quux
}

Без переопределения значений по умолчанию, печать default(E) возвращает Foo, поскольку это первый встречающийся элемент.

Однако, не всегда - случай, когда 0 перечисления представлен первым членом. Например, если вы сделаете это:

enum F
{
    // Give each element a custom value
    Foo = 1, Bar = 2, Baz = 3, Quux = 0
}

Печать default(F) даст вам Quux, а не Foo.

Если ни один из элементов в перечислении G не соответствует 0:

enum G
{
    Foo = 1, Bar = 2, Baz = 3, Quux = 4
}

default(G) возвращает буквально 0, хотя его тип остается как G (как указано в приведенных выше документах, приведение к данному типу перечисления).

9 голосов
/ 13 сентября 2016

Я думаю, что довольно опасно полагаться на порядок значений в перечислении и предполагать, что первое всегда является значением по умолчанию. Это будет хорошей практикой, если вы заинтересованы в защите значения по умолчанию.

enum E
{
    Foo = 0, Bar, Baz, Quux
}

В противном случае все, что нужно, - это неосторожный рефакторинг ордера, и у вас совершенно другое значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...