C ++ 언어 표준에 sizeof (bool)가 정의되어 있습니까?


답변:


167

sizeof(bool) 구현이 정의되어 있으며 표준은이 사실에 주목할만한 강조를합니다.

§5.3.3 / 1, 요약 :

sizeof(char), sizeof(signed char)sizeof(unsigned char)1; sizeof다른 기본 유형 에 적용된 결과 는 구현에 따라 정의됩니다. [참고 : 특히 sizeof(bool)sizeof(wchar_t)구현 정의된다. 69) ]

각주 69) :

sizeof(bool) 1 일 필요는 없습니다.


내 프로그램을 컴파일하는 데 필요한 플래그가 bool있습니까? 내 컴파일러는 1 바이트 만 사용 합니까?
이글

3
@Eagle : 그것은 당신의 컴파일러에 달려 있습니다. 컴파일러에게 맡기는 것이 가장 좋습니다.
GManNickG

5
std :: vector <bool>은 표준에 따라 1 비트 bool을 포함하는 벡터에 최적화되어 있습니다.
user3063349

15

http://msdn.microsoft.com/en-us/library/tf4dy80a.aspx

"Visual C ++ 4.2에서 표준 C ++ 헤더 파일에는 bool과 int를 동일시하는 typedef가 포함되어 있습니다. Visual C ++ 5.0 이상에서 bool은 1 바이트 크기의 기본 제공 형식으로 구현됩니다. 즉, Visual의 경우 C ++ 4.2, sizeof (bool) 호출은 4를 생성하지만 Visual C ++ 5.0 이상에서는 동일한 호출이 1을 생성합니다. 이로 인해 Visual C ++ 4.2에서 bool 유형의 구조 멤버를 정의하고 개체를 혼합하는 경우 메모리 손상 문제가 발생할 수 있습니다. 4.2 및 5.0 이상의 컴파일러로 빌드 된 파일 (OBJ) 및 / 또는 DLL. "


2
0xbadf00d가 특정 / 임의로 선택된 컴파일러 구현이 아닌 표준에 대해 질문했기 때문에 이것이 질문과 다소 관련이 있지만 분명히 대답이 아님을 알고 있습니까?
Christopher Creutzig

13
@ChristopherCreutzig 반례에 의한 증거입니다.
kinokijuf

12
@kinokijuf 반례가 아닙니다. Visual C ++에는 표준과 호환되지 않는 많은 것들이 있습니다.
0xbadf00d

11

정의 된 구현입니다. 만 sizeof(char)입니다 1표준으로.


2
pls는 표준의 1이 4 바이트를 의미 할 수 있습니다. 모든 유형은 4의 제품입니다. 따라서 표준이 char을 정의하는 것은 1이지만 측정을 정의하지는 않습니다.
user3063349

1은 표준에서 8 비트 또는 1 바이트를 의미합니다
paulm

11
1 바이트. 바이트 당 비트 수는 표준에 의해 정의되지 않는다 (이것은 적어도 8 IIRC 있어야)하지만에서 찾을 수 CHAR_BIT에 정의 climits.
peoro

3

5.3.3 단락 1 참조 :

[참고 : 특히 sizeof (bool) 및 sizeof (wchar_t)는 구현에 따라 정의됩니다 .69)]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.