首页 > 后端开发 > C++ > 处理空值时如何防止运算符重载中的无限递归?

处理空值时如何防止运算符重载中的无限递归?

Mary-Kate Olsen
发布: 2025-01-08 16:12:44
原创
262 人浏览过

How to Prevent Infinite Recursion in Operator Overloading When Handling Nulls?

如何避免运算符重载中处理空值时出现无限递归?

在定义比较运算符的重载时,正确处理空值情况至关重要,以避免无限递归。以下代码演示了 == 运算符重载中的无限递归问题:

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

public static bool operator ==(Foo foo1, Foo foo2) {
    if (foo1 == null) return foo2 == null;
    return foo1.Equals(foo2);
}</code>
登录后复制

在此场景中,当其中一个操作数为空时,== 运算符重载会递归调用自身。为了避免此问题,需要使用 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板