본문 바로가기
Script/Modern C++

[Modern C++] Chapter 03. nullptr

by song.ift 2023. 5. 22.

GitHub : https://github.com/developeSHG/Modern-C/blob/a30dc0a22e2afcdb8ae81e9ca9e3f46fb125ab66/Modern%20C%2B%2B/Modern%20C%2B%2B/nullptr.cpp

 

GitHub - developeSHG/Modern-C: Modern C++

Modern C++. Contribute to developeSHG/Modern-C development by creating an account on GitHub.

github.com

 

 


 

 

#include <iostream>

using namespace std;

// 주제 : nullptr

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

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

class Knight
{
public:
	void Test()
    {
    
	}
}

Knight* FindKnight()
{
	return nullptr;
}

// nullptr 구현
const class
{
public:
	// 그 어떤 타입의 포인터와도 치환 가능
    template<typename T>
    operator T* () const
    {
    	return 0;
    }
    
    // 그 어떤 타입의 멤버 포인터와도 치환 가능
    template<typenameC, typename T>
    operator T C::* () const
    {
    	return 0;
    }
    
private:
	void operator&() const; // 주소값 &을 막는다.
} _nullptr;

int main()
{
	int* ptr = NULL; // 0 NULL
    
    // 1) 오동작
    Test(0);		// "Test(int)"
    Test(NULL); 	// "Test(int)"
    Test(nullptr);	// "Test(*)"
    Test(_nullptr);	// "Test(*)"
    
    // 2) 가독성
    Knight* knight = FindKnight();
    if (knight == _nullptr)
    {
    }
    
    void (Knight::* memFunc)();
    memFunc = &Knight::Test;
    
    if (memFunc == _nullptr)
    {
	}
    
    
    return 0;
}

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

[Modern C++] Chapter 06. delete  (0) 2023.05.22
[Modern C++] Chapter 05. enum class  (0) 2023.05.22
[Modern C++] Chapter 04. using  (0) 2023.05.22
[Modern C++] Chapter 02. 중괄호 초기화 { }  (0) 2023.05.22
[Modern C++] Chapter 01. auto  (0) 2023.05.22

댓글