(Cโบโบ) ๐Ÿ•ณnullptr

0์€ NULL์ด ์•„๋‹ˆ๋‹ค

less than 1 minute read

๊ธฐ์กด NULL์ฒ˜๋Ÿผ ์ˆซ์ž 0์„ ๋„ ํฌ์ธํ„ฐ๋กœ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ ์ˆซ์ž์™€ ํ˜ผ์šฉ๋˜์–ด ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ Modern C++์—์„œ๋Š” nullptr์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

#include <stdio.h>  
#include <vector>  
  
void foo(int)  
{  
	printf("foo(int)\n");  
}  
void foo(int*)  
{  
	printf("foo(int*)\n");  
}  
  
int main()   
{  
	//foo(NULL);  
	foo(nullptr);  
	return 0;  
}  

์œ„ ์˜ค๋ฒ„๋กœ๋”ฉ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด nullptr์˜ ์‹ค์ œ ๊ตฌํ˜„์€ ์–ด๋–จ๊นŒ?

const class    // ์ต๋ช… ํด๋ž˜์Šค  
{  
    public:  
        template <typename T>  
        operator T*(void) const  
        {  
            return 0;  
        }  
  
        template <typename C, typename T>  
        operator T C::*(void) const  
        {  
            return 0;  
        }  
    private:  
        void operator&(void) const;  
} nullptr = {};    // ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค  

nullptr์€ ์œ„ ๊ตฌํ˜„์ฒ˜๋Ÿผ ํด๋ž˜์Šค์—ฌ์„œ ์ˆซ์ž์™€ ํ˜ผ์šฉ๋  ์ˆ˜ ์—†๊ณ  ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•ด ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋œ๋‹ค.