-
항목8. 0과 NULL보다 nullptr을 선호하라Effective Modern C++ 2022. 7. 20. 13:52
리터럴 0은 int이지 포인터가 아니다. NULL은 컴파일러가 int 이외의 정수 형식을 부여할 수도 있다. 하지만 중요한 것은 NULL도 마찬가지로 포인터가 아니다.
- 포인터만 사용할 수 있는 위치에 있으면 마지못해 널 포인터로 해석하긴 하지만 0과 NULL은 포인터 형식이 아니다.
- 그래서 포인터와 정수 형식의 중복 적재가 있으면 0이나 NULL로 포인터를 받는 중복적재가 호출될 일은 없다.
- 특히 템플릿으로 사용해 0이나 NULL을 받으면 템플릿 형식 연역이 적용돼 int(int든 int 비슷한 형식이든)를 포인터 형식을 받아야 하는 곳에 넘겨주면서 형식 오류가 발생한다.
- nullptr은 모든 생(raw) 포인터 형식으로 암묵적 변환되며, 이 덕분에 마치 모든 형식의 포인터처럼 행동한다. (std::nullptr_t 라는 형식이다.)
결론1 - 0과 NULL보다 nullptr을 선호하라.
결론2 - 정수 형식과 포인터 형식에 대한 중복적재를 피하라.
'Effective Modern C++' 카테고리의 다른 글
항목10. 범위 있는 enum을 선호하라. (0) 2022.07.23 항목9. typedef보다 별칭 선언을 선호하라 (0) 2022.07.20 항목7. 객체 생성시 () 와 {} 를 구분하라 (0) 2022.07.19 항목5&6. auto를 선호하라 (0) 2022.07.17 항목4. 연역된 형식을 파악하는 방법 (0) 2022.07.14