오븐 노트

[C++] nullptr 본문

Develop/C++

[C++] nullptr

오 븐 2023. 12. 7. 18:06
#include <iostream>
using namespace std;
#include <vector>
#include <list>
#include <deque>
#include <map>
#include <set>
#include <algorithm>

class Knight
{
public:
	void Test()
	{

	}
};

Knight* FindKnight()
{
	// TODO

	return nullptr;
}

void Test(int a)
{
	cout << "Test(int)" << endl;
}

void Test(void* ptr)
{
	cout << "Test(*)" << endl;
}

// NullPtr 구현
const
class
{
public:
	// 그 어떤 타입의 포인터와도 치환 가능
	template<typename T>
	operator T* () const
	{
		return 0;
	}

	// 그 어떤 타입의 멤버 포인터와도 치환 가능
	template<typename C, typename T>
	operator T C::* () const
	{
		return 0;
	}

private:
	void operator&() const; // 주소값 &을 막는다
} _NullPtr; // class를 선언하자마자 객체를 선언

int main()
{
	int* ptr = NULL; // 과거 0 NULL

	// 1) 오동작
	Test(0);
	Test(NULL); // define 0
	Test(_NullPtr);

	// 2) 가독성
	auto knight = FindKnight();
	if (knight == _NullPtr)
	{

	}

	void (Knight::* memFunc)();
	memFunc = &Knight::Test;

	if (memFunc == _NullPtr)
	{

	}

	//nullptr_t whoami = nullptr; // nullptr의 타입

	return 0;
}

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
 
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.

 

모든 글은 제가 공부하기 위해 작성합니다.

'Develop > C++' 카테고리의 다른 글

[C++] enum class  (0) 2023.12.13
[C++] using  (0) 2023.12.07
[C++] 중괄호 초기화 { }  (0) 2023.10.16
[C++] auto  (0) 2023.10.03
[C++] algorithm  (0) 2023.09.30