如何在 c++98 中定义我们自己的 nullptr

How to define our own nullptr in c++98?

本文关键字:我们 我们自己 自己的 nullptr 定义 c++98      更新时间:2023-10-16

实际上我正在编写所有库类的自己的版本,我不想将 STL 文件包含在我的类文件中。因此,例如,我想检查节点是否等于 null。如果我写类似的东西

#define nullptr 0

然后它不适用于其他节点指针(即 Node *root = nullptr (

如何做到这一点在书中提到:有效C++,Scott Meyers的第2版(新版本可用(在章节中:">项目25:避免指针和数字类型过载。

如果您的编译器不知道 C++11 引入的 nullptr 关键字,则需要它。

const                         /* this is a const object...     */
class nullptr_t
{
public:
   template<class T>          /* convertible to any type       */
   operator T*() const        /* of null non-member            */
      { return 0; }           /* pointer...                    */
   template<class C, class T> /* or any type of null           */
      operator T C::*() const /* member pointer...             */
      { return 0; }   
private:
   void operator&() const;    /* Can't take address of nullptr */
} nullptr = {};               /* and whose name is nullptr     */

这本书绝对值得一读。


nullptr相对于NULL的优势在于,nullptr的行为类似于真正的指针类型,因此它增加了类型安全性,而NULL就像在 C++11 之前刚刚设置为 0 的整数。

不应使用关键字标识符定义宏。

即使不使用 STL,也

不需要定义自己的 nullptr,因为它不是 STL(也不是标准库(的一部分,而是 (C++( 语言本身的一部分。