C++에서 nullptr의 의미는?
_____A1: nullptr는 C++11부터 도입된 키워드로, 널 포인터(null pointer)를 표현하는 특수한 상수입니다. 즉, 어떤 포인터도 가리키지 않는 ‘빈’ 포인터를 나타냅니다.
Q2: 기존의 NULL과 nullptr의 차이는 무엇인가요?
A2:
- NULL은 보통 0 또는 ((void*)0)으로 정의된 매크로이며, 정수형 0과 혼동될 수 있습니다.
- nullptr는 타입이 std::nullptr_t로 명확한 포인터 타입이며, 오버로드 해석 시 정수 0과 구분되어 안전한 타입 매칭이 가능합니다.
Q3: nullptr의 타입은 무엇인가요?
A3: nullptr의 타입은 std::nullptr_t이며, 이 타입은 포인터 타입으로 암시적 변환이 포인터 및 멤버 포인터 타입에서만 가능합니다.
Q4: nullptr를 사용하면 어떤 장점이 있나요?
A4:
- 타입 안전성 향상: 정수 0과 구분되어 오버로드 판단 오류 방지
- 명확한 의미 전달: 코드상 ‘포인터가 null임’을 직관적으로 표현
- 컴파일러 오류 감소: 혼동으로 인한 버그 예방
Q5: nullptr를 기존 포인터 변수에 어떻게 사용하나요?
A5: 다음과 같이 포인터를 초기화하거나 비교할 때 씁니다.
```cpp
int* p = nullptr; // 초기화
if (p == nullptr) { /* p가 null일 때 처리 */ }
```
Q6: nullptr는 어떤 상황에서 쓰는 것이 좋나요?
A6: 포인터를 초기화할 때나, 널 포인터와의 비교 연산을 수행할 때 nullptr를 사용하는 것이 최선입니다. 특히 함수 오버로드에서 정확한 타입 매칭이 필요할 때 권장됩니다.
Q7: nullptr는 정수형 0과 완전히 다릅니까?
Q8: nullptr는 어떤 버전의 C++에서부터 사용 가능한가요?
A8: nullptr는 C++11 표준부터 도입되었습니다. 그 이전 버전에서는 사용할 수 없으며, 대신 NULL이나 0을 사용했습니다.
Q9: std::nullptr_t란 무엇인가요?
A9: std::nullptr_t는 nullptr의 타입으로, 하나뿐인 리터럴 타입입니다. 이 타입은 nullptr와 동일하며, 포인터 타입으로 암시적 변환이 가능합니다.
Q10: 예제 코드로 nullptr 사용법을 보여주세요.
A10:
```cpp
include
void f(int) { std::cout << "int 버전 호출\n"; }
void f(char*) { std::cout << "char* 버전 호출\n"; }
int main() {
f(0); // int 버전 호출 (0은 int)
// f(NULL); // 모호할 수 있음
f(nullptr); // char* 버전 호출, nullptr는 포인터 타입
char* p = nullptr;
if (p == nullptr) {
std::cout << "포인터가 null입니다.\n";
}
}
```
요약하자면, nullptr는 C++11에서 도입된 널 포인터 상수로, 기존 NULL의 문제점을 보완해 타입 안정성과 코드 명확성을 높입니다.
작성자:
김도현 [비회원]
| 작성일자: 1년 전
2024-09-20 17:11:30
조회수: 156 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 156 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.