NULL是C 标准库表示空指针的类型,nullptr是C++ stl表示空指针的类型
事实上,NULL或是nullptr都不是C/C++的关键字
NULL和nullptr的使用应该优先选用nullptr(参见Effective Modern C++第3章条款8)
理由:
- NULL具有不确定性
NULL通常被这样定义
#define NULL 0L
由此产生NULL是long整形数或是空指针的不确定 导致以下代码编译出错
static void test(int p) {
std::cout << "test(int)" << std::endl;
}
test(NULL);
2.nullptr解决了这个问题
先贴一段自定义的nullptr实现
//代码来自wiki
const class nullptr_t
{
public:
template<class T>
inline operator T*() const //强制类型转换为某种指针类型时时返回0
{ return 0; }
template<class C, class T>
inline operator T C::*() const //强制类型转换为成员变量时返回0
{ return 0; }
private:
void operator&() const; //禁止引用(空指针不应当有引用)
} nullptr = {};
nullptr的实现代码涉及到重载符号以及强制类型转换
nullptr可以被强制转换成任何类型的指针,而非NULL这样的实质上是一个long整数
网友评论