首页 > 后端开发 > C++ > 使用空检查重载'==”运算符时如何避免无限递归?

使用空检查重载'==”运算符时如何避免无限递归?

Barbara Streisand
发布: 2025-01-08 15:56:41
原创
355 人浏览过

How to Avoid Infinite Recursion When Overloading the '==' Operator with Null Checks?

正确处理空值检查,避免'=='运算符重载中的无限递归

重载'=='运算符时,务必正确处理空值检查以防止无限递归。问题中提供的代码片段展示了一种错误的方法:

<code>if (foo1 == null) return foo2 == null;</code>
登录后复制

此条件会导致无限递归,因为对 == 的第二次调用将再次尝试检查 foo1 是否为空,从而导致死循环。

正确的代码

为了解决这个问题并避免无限递归,请使用 object.ReferenceEquals 进行空值检查:

<code>if (object.ReferenceEquals(foo1, null))
    return object.ReferenceEquals(foo2, null);</code>
登录后复制

此条件可以正确处理 foo1 或 foo2(或两者)为空的情况。如果两个操作数都为空,则返回 true;如果一个或两个操作数不为空,则返回 false。

完整的修正

下面的修正代码将此修改合并到提供的运算符重载中:

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

通过此更改,运算符重载将能够正确处理空值检查,而不会导致无限递归。

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

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