nullptr

Modern C++에 적응하기
Effective Modern C++ Chapter 3. nullptr


nullptr

NULL0포인터 타입 이 아니다. 둘은 모두 정수 타입 으로 취급된다.

1
2
3
void f(int);
void f(bool);
void f(void*);

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


References

Author

Joyus.Gim

Posted on

2022-07-26

Updated on

2022-07-26

Licensed under

Comments