我遇到了一些代码,如下所示:
if(instance != (Class*)(0))
有人可以描述这是在做什么吗?
它检查是否instance
不指向 address 0
,强制转换Class*
为多余的。
如果instance
是一个对象,它调用bool operator != (const Class*) const
;
Ifinstance
是一个指针,这将检查它是否是NULL
. 演员阵容是多余的。
如果instance
不是指针(例如某个类的实例),则语义取决于类,因为运算符重载进入图片。
简而言之:它测试指针是否为空。
详细说明:表达式(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 检查。
它检查您要比较的指针是否指向NULL
. (Class *)
演员阵容是不必要的。它等价于 C++0x 中的以下内容:
if (instance != nullptr)
Assuming that instance is a pointer, which it most certainly is.