nullptr 은 포인터 변수의 값으로 0을 전달하기 위해 C++11에서 새로 추가된 키워드입니다.
언듯 보면 대단히 쓸모없어 보이는 이 키워드는 그냥 포인터 변수에 정수 0을 대입하는것 보다 아주 약간 유용한 기능을 제공합니다.
바로 오버로딩 된 함수를 호출 시 무심코 0값을 전달하는 경우
정수형 인자를 받는 함수가 잘못 호출 될 수 있습니다.
|
void test(char *str) 함수를 호출하고 str is null을 출력하고 싶은경우가 있다고 가정합니다.
무심코 0을 전달하면 void test(int v) 가 호출되버리고 맙니다.
하지만 nullptr 을 전달하면 nullptr 은 정수형으로 인식하지 않기 때문에 포인터 변수를 받는 void test(char *str)이 호출되게 됩니다.
만약 void test(int *pi) 도 있다면 어떻게 될까요?
그런 경우는 어떤것을 호출될지 모호하기 때문에 컴파일 타임 에러가 납니다.
그런 경우는 그냥 전달 전에 캐스팅 해서 어떤 함수를 호출할지 정해주어야합니다.
(int*)0 전달 또는 (int*)nullptr 전달
nullptr 을 매개변수로 전달 할 수 있는것을 보면 nullptr도 타입이 있겠죠?
auto a = nullptr; 이런식으로 작성해서 a의 타입을 확인해보면
std::nullptr_t 라는 타입이라고 나옵니다.
구조를 보려고 했는데 볼수가 없습니다. 그냥 bool, int 이런것처럼 새로운 타입입니다.
댓글 없음:
댓글 쓰기