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

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

Barbara Streisand
Barbara Streisand原创
2025-01-08 15:56:41376浏览

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中文网其他相关文章!

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