Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mencegah Rekursi Infinite Apabila Melebihkan Operator == dengan Nilai Null?

Bagaimana untuk Mencegah Rekursi Infinite Apabila Melebihkan Operator == dengan Nilai Null?

DDD
Lepaskan: 2025-01-08 16:07:41
asal
726 orang telah melayarinya

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

Mengendalikan nilai nol apabila melebihkan operator ==

Dalam sesetengah kes, cuba membebankan operator == dengan kod berikut boleh mengakibatkan rekursi tak terhingga:

<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>
Salin selepas log masuk

Masalahnya ialah tanpa semakan nol khusus, perbandingan == secara rekursif memanggil kaedah == operator terlebih beban untuk membandingkan foo1 dan foo2. Oleh kerana foo1 kosong, gelung rekursif dicetuskan.

Untuk menyelesaikan masalah ini, anda boleh menggunakan ReferenceEquals untuk menambah semakan nilai nol:

<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>
Salin selepas log masuk

Dengan menggunakan ReferenceEquals untuk menyemak nilai nol, anda memastikan bahawa kaedah terlampau beban operator == tidak berulang tanpa had, membenarkan perbandingan nol dikendalikan dengan anggun.

Atas ialah kandungan terperinci Bagaimana untuk Mencegah Rekursi Infinite Apabila Melebihkan Operator == dengan Nilai Null?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan