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);의 함수 호출은 항상 세 번째 함수를 호출한다.