nullptr 키워드 (C++11)
nullptr 키워드는 포인터 만을 위한 NULL 상수입니다.
C 에도 NULL 이라는 상수는 0을 의미하는 정수이지만 포인터의 값에도 혼용되어 사용 되었습니다.
#include <iostream>
void echo(int val)
{
printf("int\n");
printf("%d\n", val);
}
void echo(int* val)
{
printf("int pointer\n");
if (val == nullptr)
printf("null\n");
else
printf("%d\n", *val);
}
int main(int argc, char** argv)
{
int val = 0;
echo(0);
echo(NULL);
echo(&val);
echo(nullptr);
}
int
0
int
0
int pointer
0
int pointer
null
echo 함수는 int 값 혹은 int 포인터를 인수로 받습니다.
- NULL 은 int 값을 받는 함수를 우선 호출합니다.
- 명시적으로 (int*)NULL 을 이용해 호출할 수 있지만 불편합니다.
nullptr 은 위 상황에서 int 포인터를 받는 함수만을 호출합니다.
예제에서 int 를 인수로 받는 함수를 제거하면 정상적으로 컴파일이 되지만, int*를 인수로 받는 함수를 제거하면 에러가 발생합니다.
- 묵시적 변환은 int -> int* 변환은 허용 되지만, int* -> int 로 변환은 허용되지 않습니다.
- 명시적 변환은 허용됩니다.