2012-03-27 3 views
-4

나는 post을 보았는데, 그 말은 C++에서 NULL은 0입니다. 당신은 몇 가지 포인터가있는 경우는 NULL이 아닌 경우, if(ptr)에만 작동C++에서는 NULL이 참으로 0입니까?

#include <iostream> 
using namespace std; 

int main() { 

    cout << NULL <<endl ; 
    cout << (NULL == 0)<<endl; 
} 

그에 대한 weired 일이된다 :이 코드 doesn't work는 왜이 사실이라면. 우리가 알고있는 바와 같이 조건이 성립하면 if(!0)과 같은 경우에만?

+17

는 "작동하지 않습니다"정의합니다. 그것은 나에게 (잘 작동합니다) (http://ideone.com/UdbHt)처럼 보입니다. – ildjarn

+0

"코드가 작동하지 않음"이란 무엇을 의미합니까? 어떤 결과를 기대합니까? 그게 실제로 일어나는 것과 어떻게 다른가요? – Gabe

+0

[NULL, '\ 0'과 0 사이의 차이점은 무엇입니까?] (http://stackoverflow.com/questions/1296843/what-is-the-difference-between-null-0-and-0) – AJG85

답변

6

0은 C++에서 "널 포인터"를 의미 할 수 있습니다. null로 포인터의 비교에 필요한 표현으로, 0은 사용하기 괜찮 즉

char *p; 

// Later 
if (p == 0) 

는 "작업"또는 대부분 컴파일러 공급 업체 NULL 정의하는 방법에 의존하지 제공된 문을. NULL이 바로 0으로 정의되어있는 경우, 당신은 전처리 한 후 다음과 같은 것이다 :

cout << 0 << endl; 
cout << (0 == 0) << endl; 

첫 번째 문은 단지 숫자가 아니라 당신이 무슨 의도하지 않은 포인터의 cout을로 번역합니다. C++ 11에서

, 당신은 C++에서 NULL 대신 nullptr 또는

+0

좋아요, 방금 표준을 보았고 NULL은 정의 된 구현입니다! +1 –

+1

@Jesse Good : 정밀도 : NULL은 실제로 3.2.4에서 기술 된대로 구현이 정의되었지만 4.10에서는 추가 제약 조건이있다. '널 포인터 상수는 정수 상수 표현식 (5.19) prvalue ** 정수형 0 ** 또는 std :: nullptr_t' 유형의 prvalue로 평가되는 유형. 구현 정의 (그 유형, 아마?), 결국 구현에 관계없이 0으로 평가되는 정수 유형입니다. 이것은 C++에서 NULL이 -1 또는 0xFFFFFFFF가 될 수 있다고 말하는 일부 신화와는 완전히 다릅니다. – paercebal

+0

'nullptr'에 대해 언급 해 주셔서 감사합니다. – Neil

-1

정상적으로 작동하지만 NULL이 실제로는 0이 아니므로 컴파일러 경고가 표시 될 수 있습니다. 그래서 컴파일러는 숫자로 사용하는 것을 좋아하지 않습니다.

4

0을 사용해야 NULL은 참으로 제로이다. Bjarne Stroustrup's C++ Style and Technique FAQ도 참조하십시오. 그 존재와

(NULL == 0)

사실이 될 것이며,

cout << NULL <<endl ;

0

를를 법원 것이다

말했다 당신이 아칸소 경우 비록 포인터에 null을 사용하고 C++ 11을 사용하는 경우 nullptr을 What exactly is nullptr?과 같이 사용해야합니다. 추가 참조 : MSDN's nullptr article

(또한 사용자의 기본 회신이 누락되었습니다.) 제로 NULL 가리키는 대한

+0

그래서 Bjarne Stroustrup이 대답을 다르게 말할 것이라는 점을 발견했지만 몇 군데에서 읽었습니다. – josephthomas

+1

@Cornstalks : 나는 네가 틀렸다고 생각한다. N3337의 4.10 절을보십시오.'널 포인터 상수는 0 ** ** 또는 std :: nullptr_t' 타입의 prvalue로 평가되는 정수형의 정수 상수 표현식 (5.19) prvalue **입니다. "NULL"매크로는 "널 포인터 상수"이며 "정수 유형 [...]이"0 "으로 평가됩니다. – paercebal

+0

@paercebal : 아, 네, 뒤늦은 지경에서 어떻게 생각해 냈는지 모르겠습니다. 수정해 주셔서 감사합니다. 다른 사람들을 오도하지 않기 위해 잘못된 설명을 삭제했습니다. – Cornstalks

관련 문제