Rumah > pembangunan bahagian belakang > C++ > Mengapa Menolak 1 daripada Saiz Vektor Kosong dalam C Menghasilkan Nombor Positif yang Besar Daripada -1?

Mengapa Menolak 1 daripada Saiz Vektor Kosong dalam C Menghasilkan Nombor Positif yang Besar Daripada -1?

Patricia Arquette
Lepaskan: 2024-12-10 19:35:15
asal
472 orang telah melayarinya

Why Does Subtracting 1 from an Empty Vector's Size in C   Result in a Large Positive Number Instead of -1?

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
}
Salin selepas log masuk

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!

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