Rumah >pembangunan bahagian belakang >C++ >Mengapakah Jenis Nilai Ini Mempunyai Kod Hash yang Sama Walaupun Medan Rentetan Berbeza?
Memahami Pelaksanaan Kod Hash ValueType
Dalam kod yang disediakan, kedua-dua struktur k1 dan k2 mempunyai nilai rentetan yang berbeza dalam medan Nama, namun yang mengejutkan, ia mengembalikan yang sama kod cincang. Ini adalah kerana pelaksanaan rumit GetHashCode untuk jenis nilai.
Pengendalian Jenis Nilai CLR
Untuk jenis nilai tanpa medan rujukan atau jurang penjajaran, CLR menggunakan mekanisme pencincangan pantas dengan XOR-ing semua bit dalam struktur. Walau bagaimanapun, apabila terdapat medan rujukan atau jurang, CLR menggunakan pendekatan yang lebih selektif.
Pencincangan Medan Terpilih
Daripada mempertimbangkan semua medan, CLR melelang melalui medan struktur dan mengenal pasti medan pertama yang boleh digunakan (jenis nilai bukan nol atau rujukan objek). Kod cincang kemudian dikira menggunakan medan tunggal itu dan penunjuk jadual kaedah, dan prosesnya berakhir.
Pemilihan Medan
Ini menerangkan sebab hanya medan id menyumbang kepada kod cincang dalam contoh yang disediakan, walaupun medan Nama berbeza. Oleh itu, menukar susunan id dan medan Nama memastikan bahawa medan Nama digunakan untuk pencincangan.
Keanehan Perpuluhan
Terutamanya, terdapat pepijat dalam cincang pantas CLR pengiraan untuk struktur yang mengandungi nilai Perpuluhan. Bit Perpuluhan tidak menggambarkan nilai berangkanya dengan tepat, yang membawa kepada penjanaan kod cincang yang tidak betul dalam kes tertentu.
Atas ialah kandungan terperinci Mengapakah Jenis Nilai Ini Mempunyai Kod Hash yang Sama Walaupun Medan Rentetan Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!