에서 - c++ bool 자료형



C++ 컴파일러에 대해(bool) true==(int) 1을 가정 할 수 있습니까? (4)

C ++ 컴파일러에 대해 (bool)true == (int)1 을 가정 할 수 있습니까?


Answer #1

Charles Bailey의 대답은 정확합니다. C ++ 표준의 정확한 표현은 (§4.7 / 4)입니다 : "소스 유형이 bool이면 false 값은 0으로 변환되고 true 값은 1로 변환됩니다."

편집 : 그는 참조뿐만 아니라 추가 된 것을 참조하십시오 - 내가 산만 해지고 잊어 버리지 않으면 이것을 곧 삭제할 것입니다 ...

Edit2 : 다시 말하면, 부울 값 자체는 항상 0 또는 1로 변환되지만 (특히 C 표준 라이브러리에서) "기본적으로 부울"인 함수를 반환하지만 int 표현되는 것은 주목할 가치가 있습니다 true를 나타 내기 위해 false 또는 0이 아닌 값을 나타내는 경우에만 0이어야합니다. 예를 들어, <ctype.h> 의 is * 함수는 0 또는 0이 아닌 0 또는 1을 요구하지 않습니다.

bool 캐스팅하면 0이 false로 변환되고 0이 아닌 값은 true로 변환됩니다 (예상대로).


Answer #2

다른 컴파일러가 다른 결과를 반환하는 것을 발견했습니다. 나는 또한 bool을 int가 아닌 bool과 비교하는 것이 항상 좋은 것으로 나타났습니다. 이러한 int는 프로그램이 발전함에 따라 시간이 지남에 따라 가치를 변화시키는 경향이 있으며, 1로 간주하면 코드의 다른 곳에서 관련이없는 변화에 물릴 수 있습니다.


Answer #3

예. 캐스트가 중복되었습니다. 당신의 표현에서 :

true == 1

통합 프로모션이 적용되고 bool 값이 int 로 승격되며이 프로모션은 1을 산출해야합니다.

참조 : 4.7 [conv.integral] / 4 : 원본 형식이 bool ... true 로 변환됩니다.


Answer #4

표준에 따르면, 당신은 그 가정에 안전해야합니다. C ++ bool 유형에는 두 가지 값, 즉 truefalse 와 해당 값 1 및 0이 있습니다.

보일 것은 BOOL 표현식과 변수를 BOOL 표현식과 변수와 혼합하는 것입니다. 후자는 FALSE = 0TRUE != FALSE 로 정의되며 실제로는 0과 다른 값이 TRUE 로 간주됩니다.

BOOL 값이 0 또는 1이 아닌 경우 암시 적으로 BOOL 에서 BOOL 로 캐스팅하려고하는 모든 코드에 대해 최신 컴파일러가 실제로 경고를 발행합니다.





boolean