원래 포인터에서 없는 값을 0으로 나타냈습니다. C언어에서는 주로 이 0값을 NULL 이름의 매크로로 만들어서 사용했지만 C++ 11에서 nullptr이 추가되었습니다.
#define NULL 0
int* ar;
ar = NULL;
ar = nullptr;
int i = nullptr;//오류 nullptr은 숫자가 아닙니다.
nullptr은 내부적으로 0값과 같지만 숫자로 취급되지 않고 없는 값으로 취급됩니다. 이로써 숫자 0과 없는 값의 구분이 명확해졌습니다.
구분이 명확해지면 좋은 점은 다음과 같이 함수 오버 로딩이 가능합니다.
#include <stdio.h>
void Func(int* i) {
}
void Func(int i) {
}
int main() {
Func(nullptr);//위의 함수가 호출
Func(0);//아래의 함수가 호출
return 0;
}
nullptr이 없으면 NULL(0)을 넣어야 되는데 이러면 원래 목적과 달리 아래의 함수가 호출됩니다.