Ответ 1
В соответствии с этим стандартом [dcl.enum]
Тип перечисления, объявленный с enum-ключом только enum, является перечислением без пробелов, а его счетчики - неперечисленными счетчиками. Класс enum-enum и enum struct семантически эквивалентны; тип перечисления, объявленный одним из них, представляет собой скопированное перечисление, и его счетчики облагаются счетчики. Необязательный идентификатор не должен быть опущен в объявлении нумерованного перечисления. Тип-спецификатор-seq базы перечисления должен называть интегральным типом; любая cv-квалификация игнорируется. Объявление opaqueenum, объявляющее незащищенное перечисление, не должно опускать базу enum. Идентификаторы в списке перечислений объявляются как константы и могут появляться там, где требуются константы. Enumeratordefinition with = дает связанный счетчик значение, указанное константным выражением. Если первая enumerator не имеет инициализатора, значение соответствующей константы равно нулю. Определение перечислителя без инициализатора дает перечислителю значение, полученное путем увеличения значения предыдущего счетчика на единицу.
Акцент на мине
Итак, да, если вы не укажете начальное значение, оно будет по умолчанию равно 0.
Мне бы очень хотелось увидеть ответ, который подтверждает это для С++, но я также хотел бы знать, имеет ли порядковый номер 0, даже если я укажу значение в середине перечисления:
Это также работает. Он начнется с 0 и увеличится по пути. Затем после перечисления, которое вы присвоите ему значение, оно начнет увеличиваться с этого значения для следующих.