В открытом исходном коде я нашел инициализацию перечисления, которая выглядела так:
enum example {
FIRST,
FIRST_AGAIN = FIRST,
SECOND,
ETC
};
Я был удивлен, как значения перечисления будут инициализированы, потому что FIRST_AGAIN
получитзначение 0
, потому что FIRST
тоже 0
.Но я думал, что это может повлиять на значение FIRST
, равное -1
, когда значение FIRST_AGAIN
равно 0
.
Итак, я посмотрел с отладчиком, какие значения присваиваются ключевым словам.FIRST
и FIRST_AGAIN
назначаются с 0
.
Итак, мой вопрос, действительно ли это разрешено (GCC компилирует его, но что говорит стандарт C ++?) Для назначения двух ключевых слов вперечисление с тем же значением?И как компилятор переводит назначение?Поскольку, чтобы узнать значение FIRST
, компилятор должен сначала пройти через все перечисление и посмотреть, назначено ли какое-либо ключевое слово, оттуда он мог бы назначить все другие значения, но он не знает, какое назначение FIRST_AGAIN = FIRST
означает.
Может быть, вопрос глупый, и обычно делают что-то подобное.Какая польза от назначения двух ключевых слов с одинаковым значением?