과거에는 null을 의미하는 값을 포인터 변수에 전달하기 위해 0 또는 NULL을 사용하였다. 참고로 NULL은 단순히 "#define NULL 0" 이다. 그런데 0과 NULL을 사용하는 것에 몇가지 문제가 발생하였다.
발생하는 문제점과 nullptr로 해결하는 방법은 다음과 같다.
void Test(int a) {
cout << "Test(int) 호출" << endl;
}
void Test(void* ptr) {
cout << "Test(void*) 호출" << endl;
}
int main() {
/* 과거 */
// 과거에는 null을 의미하는 값을 포인터 변수에 전달하기 위해 0 또는 NULL을 사용하였다.
// 참고로 NULL은 단순히 "#define NULL 0" 이다.
// 그런데 0과 NULL을 사용하는 것에 몇가지 문제가 발생하였다.
/* 1. 오동작 방지 */
Test(NULL); // #define NULL 0 이기에 NULL은 사실상 0에 불과
Test(nullptr); // 포인터라는 의미가 있기에
}
{
auto ret = FindKnight();
if (ret == nullptr) {
// 위 조건문을 통해 반환 자료형이 포인터 형임을 추론할 수 있다.
}
}