首页 >后端开发 >C++ >使用空值重载 == 运算符时如何防止无限递归?

使用空值重载 == 运算符时如何防止无限递归?

DDD
DDD原创
2025-01-08 16:07:41761浏览

How to Prevent Infinite Recursion When Overloading the == Operator with Null Values?

重载 == 运算符时处理空值

在某些情况下,尝试使用以下代码重载 == 运算符可能会导致无限递归:

<code class="language-c#">Foo foo1 = null;
Foo foo2 = new Foo();
Assert.IsFalse(foo1 == foo2);

public static bool operator ==(Foo foo1, Foo foo2) {
    return foo1 == null ? foo2 == null : foo1.Equals(foo2);
}</code>

问题在于,如果没有进行具体的空值检查,== 比较会递归调用 == 运算符重载方法来比较 foo1 和 foo2。由于 foo1 为空,因此会触发递归循环。

为了解决这个问题,可以使用 ReferenceEquals 加入空值检查:

<code class="language-c#">Foo foo1 = null;
Foo foo2 = new Foo();
Assert.IsFalse(foo1 == foo2);

public static bool operator ==(Foo foo1, Foo foo2) {
    if (object.ReferenceEquals(null, foo1))
        return object.ReferenceEquals(null, foo2);
    return foo1.Equals(foo2);
}</code>

通过使用 ReferenceEquals 检查空值,可以确保 == 运算符重载方法不会无限递归,从而可以优雅地处理空值比较。

以上是使用空值重载 == 运算符时如何防止无限递归?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn