0就是int类型,在一些场合下,勉勉强强可以解释为空指针,但记住这是不得已场景下才会这么做。NULL在不同系统中会有不同的类型实现,有的是int,有的是long,其本质也是一个整型。但是nullptr就不一样了,虽然它的本质是std::nullptr_t,但是因为其可以隐式转换到所有类型的裸指针型别。所以在函数重载时,nullptr可以完美匹配指针型别的重载函数:
void f(int);
void f(bool);
void f(void*);
f(0); //匹配到void f(int)
f(NULL); //匹配到void f(int)
f(nullptr); //匹配到void f(void*)
要点速记
- 相对于0或者NULL,优先选用nullptr
- 避免在整型和指针型别之间重载