nullptr 的设计在于替换 NULL。

    由于 c++ 不允许将 void 隐士转换到其他类型,但如果 NULL 被定义为 ((void)0),那么当编译 char *ch = NULL时, NULL 被识别为 0;

    这样就会产生问题,导致 c++ 重载特性混乱,举例:

    1. void func(char *)
    2. void func(int)

    对于上述两个函数,若 NULL 被定义为 0,那么 func(NULL)将会去调用 func(int),导致代码看起来不直观。

    因此为了区分 空指针和 0, c++11 引入了 nullptr 关键字。
    当需要使用 NULL 的时候,养成直接使用 nullptr 的习惯。

    参考:https://www.cnblogs.com/yichengming/p/11182215.html