我在下面的行中遇到了一些代码:
if(instance != (Class*)(0))
有人可以描述一下这是做什么的吗?
答案 0 :(得分:1)
它检查instance
是否未指向地址0
,转化为Class*
是多余的。
如果instance
是对象,则会调用bool operator != (const Class*) const
;
答案 1 :(得分:1)
如果instance
是指针,则检查它是否为NULL
。演员是多余的。
如果instance
不是指针(例如某个类的实例),则语义依赖于类,因为运算符重载会进入图片。
答案 2 :(得分: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检查。
答案 3 :(得分:1)
它会检查您将其与之比较的指针指向NULL
。 (Class *)
演员阵容是不必要的。它等同于C ++ 0x中的以下内容:
if (instance != nullptr)
假设实例是一个指针,它肯定是。