최상의 답변
E가 열거 형 유형 인 sizeof (E)를 원한다고 가정합니다.
기본 유형에. 일반적으로 int이지만 enum class
를 사용하는 경우 C ++로 지정할 수 있습니다. 어느 쪽이든 sizeof는 올바른 값을 제공해야합니다.
C에서 열거 수 를 결정하는 표준 또는 기본 제공 방법은 없습니다. 또는 C ++. 훈련을 받고 간격이없는 경우 다음과 같이 사용할 수 있습니다. 첫 번째 열거를 제외한 모든 열거는 이전 열거보다 하나 더 높아야합니다.
enum Days { Monday, Tuesday, … Saturday, LAST };
여기에서 일 수는 LAST의 int 값과 동일하지만 물론 LAST가 실제로 마지막이라는 것을 확인해야합니다. 컴파일러는 이것을 강제 할 수 없습니다.
0에서 시작하지 않지만 어떤 이유로 7에서 시작하면 LAST-Monday를 계산할 수 있습니다.
enum Days { Monday = 7, Tuesday, … Saturday, LAST };
int numDays = LAST - Monday; // still yields 7
여기에서 월요일이 먼저 표시됩니다 .
Answer
열거 형 ( 열거 형 의 약자)은 숫자에 어떤 의미를 추가하는 기술입니다. 컴퓨터는 숫자로만 작동하며 열거를 통해 해당 숫자가 수량이 아닌 품질을 설명하는 척할 수 있습니다.
가장 유명한 열거 중 하나는 텍스트 저장에 사용하는 인코딩입니다. 아이디어는 어린 이용 책이 숫자 코드를 작성하는 방식과 같이 각 문자에 숫자를 할당하는 것입니다. 우리가 사용하는 코드는 다음과 같습니다 :
A = 65, B = 66, C = 67, … Z = 90; a = 97, b = 98, c = 99, … z = 122.
Windows 시스템을 사용하는 경우 다음을 시도하십시오. 텍스트를 입력 할 수있는 곳을 클릭하십시오. Alt 키를 누르고 계십시오. 키를 누른 상태에서 숫자 패드에이 숫자 중 하나를 입력합니다. 예를 들어 [Alt 키를 길게 누릅니다] 65 [Alt 해제] 문자 A가 나타납니다. 이것은 문자를 직접 입력하는 정말 오래된 방법입니다. 올바른 키보드가 설치되어 있지 않을 때 국제 문자를 입력하는 데 주로 유용합니다. Çüéâäàåçê … Alt + 128, 129, 130 등에서 얻은 것입니다. 이것은 노출하는 방법입니다. 문자의 기본 열거.
A를 의미하기 위해 숫자 65를 선택하는 것은 마술이 아닙니다. 중요한 것은 우리가 일관성이 있다는 것입니다. 따라서 열거는 숫자가 아닌 아이디어에 숫자를 할당하고 코드 작업을 좀 더 쉽게 만드는 방법입니다.
생각해보세요. 는 문자 순서가 알파벳 순서 (최소한 영어)와 일치하는 데 유용합니다. 이렇게하면 숫자 값에 대한 비교를 속이고 사용할 수 있기 때문에 항목을 알파벳 순서로 정렬하는 문자열 정렬을 더 쉽게 작성할 수 있습니다. 문자에 할당 된 숫자 값이 항상 알파벳 순서와 일치하지는 않기 때문에 다른 언어에서는 약간 까다로워집니다.
다른 열거 형 예제의 경우 처리 할 프로그램을 작성한다고 가정 해 보겠습니다. 네트워크 연결이 있습니다. 네트워크 연결은 몇 가지 다른 상태를 가질 수 있으며 수신 중 , 열림 span 일 수 있습니다. >, 닫힘 또는 오류 상태입니다. 이는 수량이 아니라 품질이며 이것이 enum의 용도입니다.
enum ConnectionState {
NCON\_LISTEN,
NCON\_OPEN,
NCON\_CLOSED,
NCON\_ERROR
};
제 생각에는 일반적으로 열거 형을 클래스 정의 안에 포함하는 것이 더 좋습니다. 그러면 접두사를 건너 뛸 수 있습니다.
class Connection {
public:
enum State {
LISTEN, OPEN, CLOSED, ERROR
};
};
유형은 Connection::State
이고 값은 Connection::LISTEN
, Connection::OPEN
등이 더 명확하다고 생각합니다.
숫자 값과 열거 형 값을 혼합 한 예는 그렇지 않습니다. ” 모든 열거 형 값은 문자로 시작해야합니다. 일반적으로 열거 형이 예상되는 곳에 숫자를 사용할 수 없습니다. C ++ 컴파일러는 int와 enum을 다른 유형으로 취급합니다. 열거 형 값과 관련된 의미있는 숫자를 갖는 것은 금지되어 있지 않지만 (알파벳 순서에 얼마나 유용한 지 참고) 기본 관행은 아닙니다.
열거 형을 출력하거나 입력 할 수 있습니까? 물론 가능합니다. 하지만 “사용자 정의 유형이므로”>> 및 <연산자를 직접 작성해야합니다. 동등한 정수 값을 출력하거나 일치하는 문자열로 /에서 변환하는 코드를 작성할 수 있습니다. 열거 형의 텍스트. 그러나 이것을 지원하는 것은 사소한 일이 아닙니다.