0

我遇到了一些代码,如下所示:

if(instance != (Class*)(0))

有人可以描述这是在做什么吗?

4

4 回答 4

1

它检查是否instance不指向 address 0,强制转换Class*为多余的。

如果instance是一个对象,它调用bool operator != (const Class*) const;

于 2013-01-26T09:33:25.300 回答
1

Ifinstance是一个指针,这将检查它是否是NULL. 演员阵容是多余的。

如果instance不是指针(例如某个类的实例),则语义取决于类,因为运算符重载进入图片。

于 2013-01-26T09:34:14.507 回答
1

简而言之:它测试指针是否为空。

详细说明:表达式(Class*)(0)实际上是从 0(即NULL)到类型指针的类型转换Class,然后将该指针(它是一个常量 NULL)与指针变量进行比较instance

一个例子:

void Check(YourClass *instance)
{
   if(instance != (YourClass*)(0))
      // do this
}

现在重要的问题是为什么。为什么不简单地作为:

 if(instance != 0)
      // do this

好吧,它只是为了代码可移植性。一些编译器可能会发出Class*正在比较的警告int(因为NULL只是0,即int)。许多静态分析工具也可能会抱怨使用类类型指针进行简单的 NULL 检查。

于 2013-01-26T09:35:11.753 回答
1

它检查您要比较的指针是否指向NULL. (Class *)演员阵容是不必要的。它等价于 C++0x 中的以下内容:

if (instance != nullptr) 

Assuming that instance is a pointer, which it most certainly is.

于 2013-01-26T09:36:31.960 回答