myObject
이라는 객체에 대한 포인터가 있다고 가정 해 봅시다. 실제로 뭔가를 가리키고 있는지 여부를 알아야합니다. 어떻게이 코드 :어떻게 BOOL에 대한 포인터를 캐스팅하면 112를 반환 할 수 있습니까?
// assume MyObjectClass *myObject;
return (BOOL)myObject;
반환 112? 항상 쓸 수 있다는 것을 알고 있습니다.
return (myObject == nil);
모두 괜찮을 것입니다. 난 항상 가정 한 오늘까지하지만, 아무것도의 명시 적 캐스팅 의지가 그것의 항상 반환 true
또는 false
(내가 아는 한, 0은 항상 false
및 true
같은 다른 값으로 간주) 그 BOOL과 bool로하는 YES
및 NO
값은 "이름이 바뀌 었습니다"bool입니다. 기본적으로 내 질문은 다음과 같습니다.
- 왜 112가 돌아 오나요? :-)
- 명시 적 캐스팅의 결과가 C/Objective-C 표준의 어딘가에서 정의 되었습니까, 아니면 컴파일러에 특정한가요?
BOOL의 정의를 살펴보십시오. 그런 다음'int a = 123; BOOL b = (BOOL) 123; int c = b;'(포인터와 관련하여 * 아무것도 * 없습니다). C에서 적절한 부울 유형을 도입 한 것은 C99라고 생각하지만 확실한 변환은 정의되지 않았습니다. (C는 C++이 아닙니다.) –
Objective-C에 대해서는 모르겠지만 C에서는 bool 유형이 없으며 0이 아닌 것은 모두 true로 간주됩니다. –
대신'!! myObject'를 시도해보십시오. 항상'int' 값이'0' 또는'1'입니다. – pmg