IT TIP

열거 형 변수 기본값?

itqueen 2021. 1. 8. 22:38
반응형

열거 형 변수 기본값?


질문은 간단합니다.

#include <iostream>

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

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

출력은 무엇입니까?

참고 : 이것은 인터뷰 아니며 이전 개발자로부터 저에게 상속 된 코드입니다. 여기서 스트리밍 연산자는 예를 들어 실제 상속 된 코드에는 없습니다.


프로그램에 정의되지 않은 동작이 있습니다. 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 유형의 객체를 0으로 초기화한다는 것은 다음을 의미합니다.
— T가 스칼라 유형 (3.9)이면 객체는 T로 변환 된 0 (영) 값으로 설정됩니다.

열거 형은 스칼라 유형입니다.

T 유형의 객체를 값 초기화한다는 것은 다음을 의미합니다.
— T가 클래스 유형
이면 blah blah — T가 비 결합 클래스 유형
이면 blah blah — T가 배열 유형이면 blah blah — 그렇지 않으면 객체는 0입니다. -초기화

그래서 우리는 다른 부분에 들어갑니다. 네임 스페이스 범위 개체는 값으로 초기화됩니다.

참조 URL : https://stackoverflow.com/questions/6842799/enum-variable-default-value

반응형