개발자 '쑥말고인절미'

[C++] nullptr 본문

STUDY/C++ & MFC

[C++] nullptr

쑥말고인절미 2024. 8. 12. 18:16

요약

  • nullptr은 C++11 표준에서 도입된 키워드이다.
  • C++ 이전 버전에서는 포인터가 아무것도 가리키지 않음을 나타내기 위해 NULL을 사용했지만, NULL은 0 으로 정의된 매크로였기 때문에 몇 가지 문제가 있었다

nullptr 도입 이전의 문제점

  • 타입 안정성
    • NULL은 본질적으로 정수형 0과 동일했기 때문에, 포인터와 정수를 구분하기 어려운 경우가 있었다. 예를 들어, 함수 오버로딩이나 템플릿에서 NULL을 사용하는 경우 애매한 상황이 발생할 수 있었다.
  • 함수 오버로딩
    • 함수 오버로딩 시 NULL 을 전달할 때 어떤 오버로드를 선택할지 명확하지 않은 경우가 있었다. 예를 들어, 정수와 포인터를 매개변수로 받는 두 함수가 있을 때, NULL을 전달하면 정수 오버로드를 선택할 수도 있었다.

nullptr의 장점

  • 타입 안정성
    • nullptr은 std::nullptr_r 타입을 가지며, 이는 모든 포인터 타입으로 암시적으로 변환될 수 있지만 정수로 변환되지 않기 때문에 위의 문제를 해결한다.
  • 명확성
    • nullptr은 포인터를 위한 전용 키워드로, 코드의 가독성과 명확성을 높여준다.

예시

// C++ 11 이전
int* ptr = NULL;  // NULL은 0으로 정의된 매크로

// C++ 11 이후
int* ptr = nullptr;  // nullptr는 포인터 전용 상수