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

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

Patricia Arquette
发布: 2025-01-08 16:01:41
原创
590 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板