Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 포인터 초기화: NULL, 0, nullptr 중 무엇을 사용해야 할까?

C++에서 NULL은 전통적으로 0으로 정의되어 왔습니다. 즉, NULL이나 0은 본질적으로 정수(integer) 값입니다.

포인터에 널 값 할당하기

포인터에 '아무것도 가리키지 않는 상태'를 나타내기 위해 다음과 같이 값을 할당할 수 있습니다.

float* p = NULL;
float* p = 0;
float* p = nullptr;

세 가지 방식의 차이점

위 세 가지 코드는 모두 포인터를 널 상태로 만든다는 점에서 동일한 결과를 냅니다. 하지만 내부적으로 중요한 차이가 존재합니다.

  • NULL: C 언어에서 물려받은 매크로로, 대부분의 컴파일러에서 0으로 정의됩니다.
  • 0: 정수 리터럴 그 자체이며, 포인터 문맥에서는 널 포인터로 변환됩니다.
  • nullptr: C++11에서 도입된 키워드로, NULL을 대체하기 위해 만들어졌습니다.

nullptr를 사용해야 하는 이유

nullptrstd::nullptr_t 타입을 가지는 전용 키워드입니다. NULL이나 0은 정수이기 때문에 함수 오버로딩 시 의도치 않게 정수 매개변수 버전이 호출되는 모호성 문제가 발생할 수 있습니다. 반면 nullptr는 오직 포인터 타입으로만 변환되므로 이러한 혼란을 방지하고 타입 안전성을 보장합니다.

따라서 C++11 이상의 환경에서 작업한다면, 가독성과 안전성을 위해 nullptr 사용을 권장합니다.