상세 컨텐츠

본문 제목

[C++11] nullptr

C++/Modern C++(11, 14, 17, 20)

by deulee 2023. 8. 26. 15:56

본문

`nullptr`은 C++11로부터 도입된 키워드로, 포인터의 널(NULL) 값을 나타내는 "포인터 리터럴(pointer literal)"이다.

 

이전에 C++에는 포인터의 널 값을 `NULL`로 나타냈지만 `nullptr``NULL`의 한계와 모호성을 해결하고자 나타났다.

 

`nullptr`의 주요 특징은 다음과 같다.

타입 안전성(Type Safety) : 이전에는 `NULL`"정수"로 표현되었기 때문에 포인터와 정수 간의 암시적 변환으로 인한 문제가 발생할 수 있었다. 하지만 `nullptr`는 포인터 타입에만 사용 가능하며, 타입간의 혼동을 방지한다.

다음 코드를 한번 보도록 하겠다.

#include <iostream>

void foo(int a)
{
	std::cout << "I'm not pointer" << std::endl;
}

void foo(int* ptr)
{
	std::cout << "I get a pointer as a parameter" << std::endl;
}

int main(void)
{
	foo(NULL); // error - call to 'foo' is ambiguos
	foo(nullptr); // call `void foo(int* ptr)`
	return 0;
}

 

이것이 이렇게 나타나는 이유는 `NULL`은 널을 가리키는 포인터가 아니라 숫자 `0`이다. 그렇기 때문에 정수형으로 암시적 변환이 가능하기 때문에 에러가 나타나는 것이다.

 

그에 반해 `nullptr`은 그 자체로 `std::nullptr_t`타입이며 이는 어떤 포인터 타입이든 암시적으로 변환이 가능하다.

'C++ > Modern C++(11, 14, 17, 20)' 카테고리의 다른 글

[C++11] decltype  (0) 2023.08.26
[C++11] Type aliases  (0) 2023.08.26
[C++11] Strongly-typed enums  (0) 2023.08.26
[C++11] Attributes  (0) 2023.08.25
[C++11] constexpr  (0) 2023.08.25

관련글 더보기