Percanggahan Saiz Vektor dengan Vektor Kosong dalam C
Pertimbangkan kod berikut:
#include <vector> #include <iostream> using namespace std; int main() { vector<int> value; cout << value.size() << endl; // output 0 cout << value.size() - 1 << endl; // output 18446744073709551615 }
Kod mencetak 0 untuk cout pertama, menunjukkan vektor kosong seperti yang dijangkakan. Walau bagaimanapun, cout kedua mencetak nombor positif yang besar (18446744073709551615). Kenapa bukan -1, seperti yang dijangkakan secara intuitif?
Memahami Jenis Tidak Bertanda
Untuk memahami tingkah laku ini, kita perlu mempertimbangkan jenis saiz vektor fungsi. vector::size() mengembalikan nilai size_t, iaitu jenis data yang tidak ditandatangani. Jenis data yang tidak ditandatangani hanya boleh mewakili nombor positif dan 0. Nombor negatif tidak boleh diwakili dengan jenis ini.
Apabila kita menolak 1 daripada saiz vektor kosong, kita memperoleh nilai -1 seperti yang dijangkakan. Walau bagaimanapun, kerana size_t tidak ditandatangani, nilai -1 melimpah ke nilai positif terbesar yang boleh diwakili oleh jenis data ini, iaitu 18446744073709551615 dalam kes ini.
Oleh itu, pernyataan cout kedua memaparkan hasil limpahan ini, sebaliknya daripada nilai -1 yang dijangkakan.
Atas ialah kandungan terperinci Mengapa Menolak 1 daripada Saiz Vektor Kosong dalam C Menghasilkan Nombor Positif yang Besar Daripada -1?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!