Подтвердить что ты не робот

Переменная переменная значение по умолчанию?

Вопрос прост:

#include <iostream>

enum SomeEnum {  
    EValue1 = 1,  
    EValue2 = 4
};

int main() {
    SomeEnum enummy;
    std::cout << (int)enummy;
}

Каким будет выход?

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

4b9b3361

Ответ 1

В программе Undefined Поведение. Значение enummy является неопределенным. Концептуально нет разницы между вашим кодом и следующим кодом:

int main() {
   int i;          //indeterminate value
   std::cout << i; //undefined behavior
};

Если вы определили свою переменную в области пространства имен, это будет инициализировано значением 0.

enum SomeEnum {  
    EValue1 = 1,  
    EValue2 = 4,  
};
SomeEnum e; // e is 0
int i;      // i is 0

int main()
{
    cout << e << " " << i; //prints 0 0 
}

Не удивляйтесь, что e может иметь значения, отличные от любых значений перечислителя SomeEnum. Каждый тип перечисления имеет базовый интегральный тип (например, int, short или long), а набор возможных значений объекта этого типа перечисления - это набор значений, которые имеет базовый тип интеграла. Enum - это просто способ удобно назвать некоторые из значений и создать новый тип, но вы не ограничиваете значения вашего перечисления набором значений счетчиков.

Обновление: Некоторые цитаты, поддерживающие меня:

Для нулевой инициализации объекта типа T означает:
    - если T - скалярный тип (3.9), объект устанавливается равным 0 (ноль), преобразованный в T;

Обратите внимание, что перечисления являются скалярными типами.

Для инициализации объекта типа T означает:
- если T - тип класса blah blah
- если T - неединичный класс тип бла-бла
- если T - тип массива, тогда blah blah - в противном случае объект инициализируется нулем

Итак, мы попадаем в другую часть. И объекты области пространства имен инициализируются значением

Ответ 2

Выход будет неопределенным. переменные члена enummy могут быть только 1 или 4.