열거형 정의에서 이전에 정의된 멤버를 이후 멤버의 일부로 사용하는 것이 합법적인가요?

StackOverflow https://stackoverflow.com/questions/1627479

  •  06-07-2019
  •  | 
  •  

문제

namespace ValueType {
  enum Enum {
    Boolean = 0,
    Float = 1,
    Double,
    SInt = 8,
    SLong,
    UInt = SInt + (1 <<4),
    ULong = SLong + (1 << 4)
  };
}
도움이 되었습니까?

해결책

예 - 요구 사항은 필수 상수 표현이어야합니다. C ++ 표준에는 다음 예가 포함됩니다.

enum { d, e, f=e+2 };

다른 팁

가 지적한 바와 같이 실내 변기, 그것은 합법적입니다.

일부 드문 경우에는 열거자가 완전히 정의된 후에만 열거자의 유형이 지정된다는 점을 알고 분노합니다.표준에서는 열거형(7.2/4)에 대해 다음과 같이 말합니다.

각 열거형은 다른 모든 유형과 다른 유형을 정의합니다.열거형 지정자의 닫는 중괄호 다음에 각 열거자는 해당 열거형의 유형을 갖습니다.닫는 중괄호 앞에 있는 각 열거자의 형식은 초기화 값의 형식입니다.열거자에 대해 초기화 프로그램이 지정된 경우 초기화 값은 표현식과 동일한 유형을 갖습니다. 첫 번째 열거자에 대해 이니셜라이저가 지정되지 않은 경우 형식은 지정되지 않은 정수 계열 형식입니다..그렇지 않으면 증분된 값을 해당 형식에서 표현할 수 없는 경우를 제외하고 형식은 이전 열거자의 초기화 값 형식과 동일합니다. 이 경우 형식은 증분된 값을 포함하기에 충분한 지정되지 않은 정수 계열 형식입니다.

강조 표시된 문장은 다음 예에 표시될 수 있습니다.

enum E {
  E0            // Unspecified type
  , E1 = E0-1   // -1, or MAX_UINT
  , E2          // 0 or (MAX_UINT+1)
};

기본적으로 선택한 유형은 E0 결과 값에 영향을 미칩니다. E1.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top