首页 >后端开发 >C++ >重载等号运算符(==)时如何避免无限递归?

重载等号运算符(==)时如何避免无限递归?

Patricia Arquette
Patricia Arquette原创
2025-01-08 16:01:41622浏览

How to Avoid Infinite Recursion When Overloading the Equality Operator (==)?

安全重载相等运算符 (==) 避免无限递归

重载相等运算符 (==) 时,务必谨慎处理空值情况,以防止无限递归。当一个或两个操作数为空时,可能会导致 == 检查的无限循环。

为了解决这个问题,请使用 ReferenceEquals 方法 而不是 == 来比较对象的空值。如果两个操作数都为空,或者两个操作数都引用同一个对象,则此方法返回 true,否则返回 false。通过使用 ReferenceEquals,以下代码可以准确地处理空值:

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);
}

通过采用这种方法,== 重载方法可以有效地比较 Foo 对象(无论它们是否为空),而不会触发无限递归。

以上是重载等号运算符(==)时如何避免无限递归?的详细内容。更多信息请关注PHP中文网其他相关文章!

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