C ++检查struct是否为NULL,即使其运算符相等也未设置

时间:2013-03-19 14:43:56

标签: c++ struct null

我有一个包含许多成员的结构,还有一个运算符重载== 像这样:

struct Adjustment {
    ObjectNumber aD;     
    Foo        afoo;  

    bool operator == (const Adjustment& aAdjustment) const
      { return (aAdjustment.ID == ID); }

  };

在代码中我有:

if(someAdjustment == NULL)
它给了我:

error C2678: binary '==' : no operator found which takes a left-hand operand of type 'Unit::Adjustment' (or there is no acceptable conversion)

所以我的问题是,如何在不更改代码的情况下检查是否设置了此结构?

2 个答案:

答案 0 :(得分:2)

您只能将指针与NULL进行比较。调整本身永远不会为NULL。

答案 1 :(得分:2)

在C ++中,由&表示的“引用”意味着您的方法的调用者有义务为您提供对象实例。没有(NORMAL)方法可以在没有对象的情况下调用方法。您可以自由地假设您调用了函数,aAdjustement将被设置为某个东西。

然而,这里有两个人:

(1)它将被设置为某种东西,但这种“某种东西”会有意义吗? Adjustement结构是否完全清零了函数的有效值?如果不是 - 那么你可以测试一下,而不是测试无效。如果任何结构值组合无效 - 使用此作为鉴别器。如果所有可能的值都有效 - 则无需检查任何内容。

(2)如果你知道暗路(tm),你实际上可以通过该函数的空引用。所以你的代码不是“安全无效”只是因为“你使用了引用&”。但是,正如我所说,使用&你清楚地说明你不允许空值。知道黑暗方式(tm)的调用者可能只会在你的函数崩溃时责备自己。

免责声明:“正常”和“黑暗方式”只是隐藏真正专业解释的额外复杂性的流行语。如果你玩铸造和* /&操作员,您将很快发现如何获得指向零地址的“int& boom”。这不是“黑暗”也不是“魔术”,它是语言和平台的一个明显特征。但是,(A)新手程序员甚至有些经验丰富的程序员往往不知道引用可以为null,而且(B)& -means-dont-pass-null的约定确实是众所周知的,因此(A + B)请适应大会,并在适当的地方随意使用。