首页 > 后端开发 > C++ > 使用空值重载 == 运算符时如何防止无限递归?

使用空值重载 == 运算符时如何防止无限递归?

DDD
发布: 2025-01-08 16:07:41
原创
715 人浏览过

How to Prevent Infinite Recursion When Overloading the == Operator with Null Values?

重载 == 运算符时处理空值

在某些情况下,尝试使用以下代码重载 == 运算符可能会导致无限递归:

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

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

问题在于,如果没有进行具体的空值检查,== 比较会递归调用 == 运算符重载方法来比较 foo1 和 foo2。由于 foo1 为空,因此会触发递归循环。

为了解决这个问题,可以使用 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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板