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
386 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!

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