(Class *)(0)在C ++中的含义是什么

时间:2013-01-26 09:31:06

标签: c++ pointers

我在下面的行中遇到了一些代码:

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

有人可以描述一下这是做什么的吗?

4 个答案:

答案 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只是0int。许多静态分析工具也可能会抱怨使用类类型指针进行简单的NULL检查。

答案 3 :(得分:1)

它会检查您将其与之比较的指针指向NULL(Class *)演员阵容是不必要的。它等同于C ++ 0x中的以下内容:

if (instance != nullptr) 

假设实例是一个指针,它肯定是。