열거 형 변수 기본값?
질문은 간단합니다.
#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
'IT TIP' 카테고리의 다른 글
Django를 사용하여 SSO (Single Sign On) 구현 (0) | 2021.01.08 |
---|---|
C ++ 컴파일러는 언제부터 문자열 리터럴 문자 이스케이프에서 두 개 이상의 16 진수를 고려하기 시작 했습니까? (0) | 2021.01.08 |
실행 파일에“git update-index --chmod = + x”자동 적용 (0) | 2021.01.08 |
JavaScript는 왜 비교 연산자보다 크거나 작을까요? (0) | 2021.01.08 |
포인터로 붕괴되는 배열에 대한 예외? (0) | 2021.01.08 |