C++

널(null) 포인터 nullptr에 대해

SadEvil 2024. 12. 23. 16:05
반응형

nullptr은 C++부터 도입된 명시적 null 포인터 상수이며, 포인터가 어떤 객체도 가리키지 않는 것을 나타냅니다.

포인터를 초기화하거나 null 포인터를 표현하는데 사용합니다. 모든 포인터 타입에서 사용할 수 있습니다.

다만, 아래처럼 포인터가 아닌 값을 초기화할때는 사용할 수 없습니다.

int x = nullptr; //오류 발생. nullptr은 포인터로만 사용 가능함

 

장점

  • NULL은 0으로 정의되어 있기 때문에, 숫자와 포인터를 혼동할 가능성이 존재했지만, nullptr은 명확히 포인터로만 사용되기 때문에, 정수와의 혼동을 방지합니다.
void func(int);
void func(int*);

func(NULL);   // 불명확: 정수 0 또는 포인터 NULL로 해석될 수 있음
func(nullptr); // 명확: 포인터로 해석
  • NULL의 정의는 시스템마다 다를 수 있지만, nullptr은 모든 플랫폼에서 동일한 의미를 가집니다(=플랫폼 독립적입니다).

nullptr과 기존 NULL의 차이점

특성 nullptr NULL
도입 시기 C++11 이상 C, C++에서 사용 가능
타입 std::nullptr_t int or void* (플랫폼 의존)
암시적 변환 모든 포인터 타입으로 변환 가능 주로 정수와 포인터로 변환 가능
오버로딩 구분 명확한 구분 가능 혼동 가능성 존재

 

요약

nullptr는 C++11부터 제공되는 타입 안전한 null 포인터 상수입니다.

모든 포인터 타입으로 변환 가능하지만, 정수와는 구분됩니다.

기존 NULL의 모호성과 한계를 극복하기 위해 도입되었습니다.

오버로딩과 포인터 초기화 시에 특히 유용합니다.

반응형