하십시오 포함 true
또는 false
모든 사이즈의 유형 bool
의 비트 필드에 저장되는 값 경우int 타입의 비트 필드를 사용해야합니까? 드래프트 C++ 표준 (N3337)에서
9.6 비트 필드
4- (1 bit bit-field), 원래의
bool
값과 비트 필드의 값은 같아야한다. 열거 자의 값이 동일한 열거 유형의 비트 필드에 저장되고 비트 필드의 비트 수가 해당 열거 유형 (7.2)의 모든 값을 보유 할만큼 충분히 큰 경우 원래 열거 자 값과 비트 필드의 값은 같음을 비교해야한다.
표준은 다른 유형의 비트 필드에 대한 이러한 동작에 대해 비공식적입니다. g ++ (4.7.3)는 비트 필드의 다른 유형을 다루는 방법을 이해하기 위해, 나는 다음과 같은 테스트 프로그램을 사용 :
#include <iostream>
enum TestEnum
{
V1 = 0,
V2
};
struct Foo
{
bool d1:1;
TestEnum d2:1;
int d3:1;
unsigned int d4:1;
};
int main()
{
Foo foo;
foo.d1 = true;
foo.d2 = V2;
foo.d3 = 1;
foo.d4 = 1;
std::cout << std::boolalpha;
std::cout << "d1: " << foo.d1 << std::endl;
std::cout << "d2: " << foo.d2 << std::endl;
std::cout << "d3: " << foo.d3 << std::endl;
std::cout << "d4: " << foo.d4 << std::endl;
std::cout << std::endl;
std::cout << (foo.d1 == true) << std::endl;
std::cout << (foo.d2 == V2) << std::endl;
std::cout << (foo.d3 == 1) << std::endl;
std::cout << (foo.d4 == 1) << std::endl;
return 0;
}
출력 :
d1: true d2: 1 d3: -1 d4: 1 true true false true
I가의 선으로 놀랐습니다 Foo::d3
에 해당하는 출력. 출력은 ideone.com과 같습니다.
표준은 int
유형의 비트 필드 비교에 대한 약속이 없으므로 g ++은 표준을 위반하지 않는 것으로 보입니다. 그것은 내 질문에 나를 데려다 준다.
int
의 비트 필드를 사용하는 것이 좋지 않습니까? 낙심해야할까요?
글쎄, 나는 적어도 비트 필드에'unsigned' 타입을 사용 하겠지만,'signed' 타입은 의미론을 이해하지 못할 것입니다. –