Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengelakkan Rekursi Infinite Apabila Membebankan Operator '==' dengan Pemeriksaan Null?

Bagaimana untuk Mengelakkan Rekursi Infinite Apabila Membebankan Operator '==' dengan Pemeriksaan Null?

Barbara Streisand
Lepaskan: 2025-01-08 15:56:41
asal
367 orang telah melayarinya

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

Kendalikan semakan nol dengan betul untuk mengelakkan pengulangan tak terhingga dalam beban operator '=='

Apabila membebankan operator '==', pastikan anda mengendalikan semakan nol dengan betul untuk mengelakkan pengulangan tak terhingga. Coretan kod yang disediakan dalam soalan menunjukkan pendekatan yang salah:

<code>if (foo1 == null) return foo2 == null;</code>
Salin selepas log masuk

Keadaan ini menyebabkan rekursi tak terhingga kerana panggilan kedua ke == sekali lagi akan cuba menyemak sama ada foo1 kosong, menyebabkan gelung tak terhingga.

Kod yang betul

Untuk menyelesaikan masalah ini dan mengelakkan pengulangan tak terhingga, gunakan object.ReferenceEquals untuk semakan nol:

<code>if (object.ReferenceEquals(foo1, null))
    return object.ReferenceEquals(foo2, null);</code>
Salin selepas log masuk

Keadaan ini mengendalikan kes di mana foo1 atau foo2 (atau kedua-duanya) kosong dengan betul. Mengembalikan benar jika kedua-dua operan kosong;

Pembetulan penuh

Kod yang diperbetulkan di bawah menggabungkan pengubahsuaian ini ke dalam beban operator yang disediakan:

<code>public static bool operator ==(Foo foo1, Foo foo2) {
    if (object.ReferenceEquals(foo1, null))
        return object.ReferenceEquals(foo2, null);
    return foo1.Equals(foo2);
}</code>
Salin selepas log masuk

Dengan perubahan ini, beban operator yang berlebihan akan dapat mengendalikan semakan nol dengan betul tanpa menyebabkan rekursi tak terhingga.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Rekursi Infinite Apabila Membebankan Operator '==' dengan Pemeriksaan 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan