Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengelakkan Rekursi Infinite Apabila Melebihkan Operator Kesamaan (==)?

Bagaimana untuk Mengelakkan Rekursi Infinite Apabila Melebihkan Operator Kesamaan (==)?

Patricia Arquette
Patricia Arquetteasal
2025-01-08 16:01:41523semak imbas

How to Avoid Infinite Recursion When Overloading the Equality Operator (==)?

Lebihkan beban operator kesaksamaan (==) dengan selamat untuk mengelakkan pengulangan tak terhingga

Apabila membebankan operator kesamarataan (==), pastikan anda mengendalikan kes kosong dengan berhati-hati untuk mengelakkan pengulangan yang tidak terhingga. Gelung infiniti == semakan mungkin terhasil apabila satu atau kedua-dua operan kosong.

Untuk menyelesaikan isu ini, sila gunakan kaedah ReferenceEquals dan bukannya == untuk membandingkan nilai nol objek. Kaedah ini mengembalikan benar jika kedua-dua operan adalah batal atau jika kedua-dua operan merujuk kepada objek yang sama, palsu sebaliknya. Dengan menggunakan ReferenceEquals, kod berikut mengendalikan nilai nol dengan tepat:

<code class="language-csharp">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>

Dengan mengambil pendekatan ini, kaedah == terlebih beban boleh membandingkan objek Foo dengan cekap (tidak kira sama ada ia batal) tanpa mencetuskan rekursi tak terhingga.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Rekursi Infinite Apabila Melebihkan Operator Kesamaan (==)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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