天天看点

C++ 11为什么会引入nullptr?

C中NULL是宏定义的void*指针:

#define NULL ((void*)0)
           

C++中void*指针不能隐式转换成其他类型的指针,所以NULL是0的宏定义:

#define NULL 0
           

那么,假如有重载函数f(int)和f(T *),调用时用f(NULL),那么就会出现二义性,无法确定调用那个函数。

nullptr是一个空指针类型nullptr_t的常量,nullptr_t类型可隐式转换为其他类型的指针,但不能转换为int,

在调用f(nullptr)时就能明确调用f(T *)。