Rumah >pembangunan bahagian belakang >C++ >Mengapakah `size() - 1` Mengembalikan Nombor Positif yang Besar untuk Vektor C Kosong?
Anomali Saiz Vektor: Mengapa Saiz() - 1 Bukan -1 untuk Vektor Kosong
Coretan kod yang diberikan menunjukkan tingkah laku pelik dalam C vektor. Apabila vektor kosong (iaitu saiz() == 0), tolak 1 daripada saiznya mengembalikan nombor positif yang besar dan bukannya -1 yang dijangkakan.
Puncanya
Kunci untuk memahami tingkah laku ini terletak pada jenis data vektor::size(). Ia ditakrifkan sebagai size_t, jenis integer tidak bertanda. Tidak seperti integer yang ditandatangani, integer yang tidak ditandatangani tidak boleh mewakili nilai negatif.
Cout Kedua: Apa Yang Berlaku?
Apabila anda menolak 1 daripada saiz vektor kosong (iaitu 0) , hasilnya melimpah dan membungkus ke nilai terbesar yang mungkin untuk integer yang tidak ditandatangani. Ini kerana integer yang tidak ditandatangani menggunakan semua bit mereka untuk mewakili nilai positif dan apabila ia melimpah, ia bermula semula daripada 0.
Contoh
Dalam kod contoh, nilai .size() ialah 0 dan value.size() - 1 melimpah ke 18446744073709551615, iaitu nilai maksimum untuk integer 64-bit yang tidak ditandatangani (2^64 - 1).
Atas ialah kandungan terperinci Mengapakah `size() - 1` Mengembalikan Nombor Positif yang Besar untuk Vektor C Kosong?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!