모든 C ++ 컴파일러에 대해 (bool) true == (int) 1이라고 가정 할 수 있습니까?
(bool)true == (int)1
C ++ 컴파일러를 사용할 수 있습니까 ?
예. 캐스트는 중복됩니다. 당신의 표현에서 :
true == 1
통합 프로모션이 적용되고 부울 가치가로 승격되며이 int
프로모션은 1을 산출해야합니다.
참조 : 4.7 [conv.integral] / 4 : 소스 유형이 bool
... 인 경우 true
1로 변환됩니다.
찰스 베일리의 대답은 맞습니다. C ++ 표준의 정확한 표현은 (§4.7 / 4)입니다. "소스 유형이 부울 인 경우 false 값은 0으로 변환되고 true 값은 1로 변환됩니다."
편집 : 그가 참조를 추가 한 것을 알았습니다. 산만하지 않고 잊어 버리지 않으면 곧 삭제하겠습니다.
Edit2 : 그런 다음 부울 값 자체는 항상 0 또는 1로 변환되는 반면 많은 함수 (특히 C 표준 라이브러리에서)는 "기본적으로 부울"이지만 값은 int
s로 표시됩니다. 일반적으로 false를 나타내려면 0 만, true를 나타내려면 0이 아니어야합니다. 예를 들어, is * 함수는 <ctype.h>
0 또는 0이 아닌 0 만 필요하면됩니다.
로 캐스팅하면 bool
0은 false로 변환되고 0이 아닌 값은 true로 변환됩니다.
표준에 따르면 그 가정에 안전해야합니다. 는 C ++ bool
- 유형하는 2 개 개의 값 true
과 false
값이 1과 0을 대응한다.
주의해야 할 것은 bool
표현식과 변수를 BOOL
표현식 및 변수 와 혼합 하는 것 입니다. 후자는 FALSE = 0
and 로 정의되며 , TRUE != FALSE
실제로는 종종 0과 다른 값이 고려됨을 의미합니다 TRUE
.
현대 컴파일러의 많은 실제로 암시에서 캐스팅을 시도하는 코드에 대한 경고 발급 BOOL
에 bool
경우 BOOL
값이 0 또는 1 다른입니다.
다른 컴파일러가 다른 결과를 true로 반환한다는 것을 알았습니다. 또한 bot를 int 대신 bool과 비교하는 것이 거의 항상 낫다는 것을 알았습니다. 이러한 int는 프로그램이 발전함에 따라 시간이 지남에 따라 가치가 변하는 경향이 있으며 1로 가정하면 코드의 다른 곳에서 관련이없는 변경으로 물릴 수 있습니다.
참고 URL : https://stackoverflow.com/questions/2725044/can-i-assume-booltrue-int1-for-any-c-compiler
'Programing' 카테고리의 다른 글
Xcode 4의 숨겨진 기능 (0) | 2020.08.03 |
---|---|
IPython 노트북에서 대화식 matplotlib 창을 어떻게 열 수 있습니까? (0) | 2020.08.03 |
캐릭터는 무엇입니까? (0) | 2020.08.02 |
유닉스 도메인 소켓 VS 명명 된 파이프? (0) | 2020.08.02 |
JUnit 테스트 케이스에서 '실패'의 실제 사용은 무엇입니까? (0) | 2020.08.02 |