天天看点

C++ 11 新特性 nullptr 学习

nullptr 出现的目的是为了替代 NULL。

在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直接将其定义为 0。

C++ 不允许直接将 void * 隐式转换到其他类型,但如果 NULL 被定义为 ((void*)0),那么当编译char *ch = NULL;时,NULL 只好被定义为 0。

这将导致C++ 中重载特性会发生混乱;

为了解决这个问题,C++11 引入了 nullptr 关键字,专门用来区分空指针、0。

nullptr 的类型为 nullptr_t,能够隐式的转换为任何指针或成员指针的类型,也能和他们进行相等或者不等的比较。

当需要使用 NULL 时候,养成直接使用 nullptr的习惯。

下面用VC6看一下;Win7;

新建一个单文档工程;

在视类头文件添加两个成员函数定义;

C++ 11 新特性 nullptr 学习

在视类CPP文件实现如下;

C++ 11 新特性 nullptr 学习

在OnDraw函数进行调用;分别定义指针为NULL,nullptr;

C++ 11 新特性 nullptr 学习

编译;不成功,如下;VC6不支持C++ 11;

C++ 11 新特性 nullptr 学习

注释掉nullptr语句;输出如下;

C++ 11 新特性 nullptr 学习

继续阅读