당으로 C ++ 표준 n4713 , 매우 유사한 코드가 제공됩니다. 사용되는 유형은 BOOL
(사용자 정의)이지만 모든 유형에 적용 할 수 있습니다.
12.2.4
4bool
어떤 크기의 비트 필드(1 비트 비트 필드 포함)에true 또는 false 값이 저장되면 원래bool
값과 비트 필드의 값이 동일하게 비교됩니다. 열거 자의 값이 동일한 열거 유형의 비트 필드에 저장되고 비트 필드의 비트 수가 해당 열거 유형 (10.2)의 모든 값을 보유 할만큼 충분히 큰 경우 원래 열거 자 값과 비트 필드의 값은 동일하게 비교되어야 합니다. [ 예:
enum BOOL { FALSE=0, TRUE=1 };
struct A {
BOOL b:1;
};
A a;
void f() {
a.b = TRUE;
if (a.b == TRUE) // yields true
{ /* ... */ }
}
— 최종 예]
언뜻 보면 굵은 부분이 해석을 위해 열린 것처럼 보입니다. 그러나, 정확한 의도는 분명해진다 enum BOOL
으로부터 유래int
.
enum BOOL : int { FALSE=0, TRUE=1 }; // ***this line
struct mystruct { BOOL enabled:1; };
int main()
{
struct mystruct s;
s.enabled = TRUE;
if(s.enabled == TRUE)
printf("Is enabled\n"); // --> we think this to be printed
else
printf("Is disabled !!\n");
}
위의 코드를 사용하면 -Wall -pedantic
.
경고 : 'mystruct :: enabled'가 너무 작아서 'enum BOOL'의 모든 값을 보유 할 수 없습니다.
struct mystruct { BOOL enabled:1; };
출력은 다음과 같습니다.
비활성화되었습니다 !! (사용할 때enum BOOL : int
)
enum BOOL : int
간단하게 만든 다면enum BOOL
, 출력은 상기 표준 pasage의 지정과 같다 :
활성화 됨 (사용시 enum BOOL
)
따라서 다른 답변이 거의없는 것처럼 그 유형은 단일 비트 비트 필드에 값 "1"을 저장할만큼 충분히 크지 않다는 결론을 내릴 수 있습니다 int
.
int
값0
과-1
.