[C++] NULL vs nullptr, 포인터에서 nullptr을 사용해야 하는 이유

2024. 9. 1. 14:55·programming/개념 정리
🤔 C++ 11에 추가된 nullptr과 NULL은 어떻게 다를까?
결론 : 간단히 말하면 NULL은 정수타입의 0, nullptr은 가르키는 것이 없는 포인터 타입이다.

 

`NULL`

NULL은 포인터일까? 답은 아니다. NULL은 전처리단계에서  0 으로 치환되는 #define 지시어일 뿐이다. 일종의 매크로로 정수 0일 뿐이다. 

 

 

💭 여기서 이것이 무엇이 문제인지 생각해보자.

NULL이 정수 0인게 왜? 따라갈 포인터도없으니 댕글링 현상도 없고 괜찮지 않을까? 

 

✔️ 함수 오버로딩에서 NULL을 사용하면, 정수와 포인터를 구분하지 못해 혼란을 일으킬 수 있다.

 

`nullptr`

 

그래서 nulptr이라는게 생겼다. nullptr는 C++11에서 도입된 키워드로, 포인터 타입을 명확하게 나타낸다. nullptr는 `std::nullptr_t`라는 전용 타입을 가지며, 타입 안전성을 제공한다. 따라서 포인터를 요구하는 함수에 nullptr를 전달하면, 명확하게 포인터로 인식된다. 이 덕분에 코드의 가독성과 안정성이 향상된다.

 

 

 

이 코드를 보면 왜 생겼는지 이해하기 더 쉬울 것 같다. 

void func(char* str){ std::cout << "char* version" << "\n"; }
void func(int i){ std::cout << "int version" << "\n"; }

int main()
{
	func(NULL);
	func(nullptr);
    
	return 0;
}

 

위 코드를 보면 인자가 NULL일 때는 정수 0으로 치환되기 떄문에 "int version"이 결과로 나온다. 

 

 

 

🔗 참고 자료: https://en.cppreference.com/w/cpp/language/nullptr

저작자표시 비영리 변경금지 (새창열림)
'programming/개념 정리' 카테고리의 다른 글
  • [node.js] axios와 fetch의 비교
  • [C++] #define과 const 그리고 constexpr
  • [Javs SE 8] Function<T, R> 과 apply()
  • [OS] LRU 알고리즘이란? 정의부터 구현까지 알아보자!
u1qns
u1qns
http://github.com/u1qns
  • u1qns
    개발 블로그
    u1qns
  • 전체
    오늘
    어제
    • 분류 전체보기 (173)
      • 회고 (1)
      • programming (17)
        • 개념 정리 (6)
        • CI CD (1)
        • 트러블 슈팅 (0)
        • 환경설정 및 팁 (7)
      • problem solving (155)
        • 개념 정리 (3)
        • 백준 (129)
        • SWEA (15)
        • 프로그래머스 (4)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    미해결
    SSAFY
    HELLOSSAFY
    되추적
    삼성청년SW아카데미
    구현
    cpp
    POW
    그리디
    DFS
    백준
    BFS
    C++
    투포인터
    cmath
    SWEA
    SSAFY수료식
    완전탐색
    boj
    DP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
u1qns
[C++] NULL vs nullptr, 포인터에서 nullptr을 사용해야 하는 이유
상단으로

티스토리툴바