08 优先使用nullptr而不是0或者NULL
08 优先使用nullptr而不是0或者NULL
0 和 NULL 都不属于指针类型。 在 C++98 中,这意味着传递 0 或者 NULL 作为参数给重载函数永远不会调用指针重载的那个函数:
void f(int); // 函数f的三个重载 |
如果 NULL 被定为 0L (即 0 作为一个 long 整形),函数的调用是有歧义的,因为 long 转化为 int , long 转化为 bool , 0L 转换为 void* 都被认为是同样可行的。
注意:使用NULL进行函数调用,在源代码的语义和它的实际情况存在着冲突。这种违背直觉的行为正是 C++98 程序员不被允许重载指针和整数类型的原因。
nullptr 的优势是它不再是一个整数类型。诚实的讲,它也不是一个指针类型,但是你可以把它想象成一个可以指向任意类型的指针。 nullptr 的类型实际上是 std::nullptr_t , std::nullptr_t 定义为 nullptr 的类型,这是一个完美的循环定义。
std::nullptr_t 可以隐式的转换为所有的原始的指针类型,这使得 nullptr 表现的像可 以指向任意类型的指针。
发布于