본문 바로가기
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

 

 


 

 

cpp
닫기
#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

댓글