>  기사  >  백엔드 개발  >  C의 포인터에 대해 `NULL`과 `0`보다 `nullptr`이 더 나은 선택인 이유는 무엇입니까?

C의 포인터에 대해 `NULL`과 `0`보다 `nullptr`이 더 나은 선택인 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-08 12:55:02208검색

Why is `nullptr` a Better Choice than `NULL` and `0` for Pointers in C  ?

nullptr 사용: NULL 및 0에 비해 장점

예기치 않은 동작을 방지하려면 포인터를 올바르게 초기화해야 합니다. 구문 int* p1 = nullptr;, int* p2 = NULL; 및 int* p3 = 0; 기능적으로는 동일해 보일 수 있지만 다른 두 옵션에 비해 nullptr을 사용하면 상당한 이점이 있습니다.

오버로딩 모호성 해결:

오버로드된 함수를 고려하세요.

void f(char const *ptr);
void f(int v);

f(NULL);  // ambiguous function call

NULL을 사용하면 f(char const *) 또는 f(int)일 수 있으므로 컴파일러는 호출할 함수를 결정할 수 없습니다. 이러한 모호함은 예상치 못한 오류로 이어질 수 있습니다. 그러나 nullptr을 사용하면 이러한 모호함이 해결됩니다.

f(nullptr); // calls f(char const *)

템플릿 전문화:

C에서 nullptr 유형은 nullptr_t입니다. 이를 통해 nullptr에 대한 템플릿 특수화가 가능해 비교할 수 없는 유연성을 제공합니다.

template<typename T, T *ptr>
struct something{};                     // primary template

template<>
struct something<nullptr_t, nullptr>{};  // partial specialization for nullptr

이 특수화를 사용하면 nullptr 인수를 고유하게 처리할 수 있습니다.

template<typename T>
void f(T *ptr);   // function to handle non-nullptr argument

void f(nullptr_t); // overload to handle nullptr argument

위 내용은 C의 포인터에 대해 `NULL`과 `0`보다 `nullptr`이 더 나은 선택인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.