nullptr
Modern C++에 적응하기
Effective Modern C++ Chapter 3. nullptr
nullptr
NULL
과 0
은 포인터 타입 이 아니다. 둘은 모두 정수 타입 으로 취급된다.
1 | void f(int); |
f(NULL);
의 함수 호출은 NULL
의 implementation에 따라 컴파일 오류를 발생시키거나 첫 번째 함수를 호출할 것이다.
nullptr
은 모든 타입의 포인터이다.
nullptr
의 타입은 std::nullptr_t
인데, std::nullptr_t
자체가 "nullptr
의 타입"이다.
1 | typedef decltype(nullptr) nullptr_t; |
nullptr_t
는 모든 raw 포인터로 암묵적 형변환 되기 때문에 nullptr
이 모든 타입의 포인터처럼 동작할 수 있다.
따라서 f(nullptr);
의 함수 호출은 항상 세 번째 함수를 호출한다.