Rumah >pembangunan bahagian belakang >C++ >Mengapakah `size_t` Tidak Ditandatangani Walaupun Kelemahan Diketahui?

Mengapakah `size_t` Tidak Ditandatangani Walaupun Kelemahan Diketahui?

Linda Hamilton
Linda Hamiltonasal
2024-10-28 09:24:29595semak imbas

Why is `size_t` Unsigned Despite the Known Drawbacks?

Mengapa size_t Tidak Ditandatangani?

Soalan:

Dalam bukunya, Bjarne Stroustrup menasihati terhadap penggunaan integer tidak bertanda untuk mendapatkan bit tambahan untuk mewakili integer positif. Walau bagaimanapun, size_t, jenis yang biasa digunakan untuk mewakili saiz tatasusunan dan rentetan, tidak ditandatangani. Adakah ini satu kesilapan dan perlukah penggunaan size_t diminimumkan?

Jawapan:

size_t tidak ditandatangani atas sebab sejarah:

Had Seni Bina:

Pada seni bina lama dengan penunjuk 16-bit, mengehadkan rentetan kepada 32 KB adalah tidak praktikal. Untuk menangani perkara ini, piawaian C memerlukan ptrdiff_t, rakan sejawat yang ditandatangani kepada size_t, mempunyai julat berkesan 17 bit.

Sistem Terbenam:

Dalam pengaturcaraan terbenam tertentu persekitaran, sebab sejarah ini masih berlaku.

Kelemahan Jenis Tidak Ditandatangani:

Walau bagaimanapun, dalam pengaturcaraan 32-bit dan 64-bit moden, jenis yang tidak ditandatangani memberikan kelemahan yang ketara :

  • Peraturan Penukaran Tersirat: Peraturan penukaran tersirat C dan C menganggap jenis yang tidak ditandatangani sebagai penarik pepijat, kerana ia membenarkan operasi dan perbandingan yang mungkin menghasilkan hasil yang tidak dijangka (mis., rentetan ("Hai") batasan seni bina pada masa itu. Walau bagaimanapun, dalam amalan pengaturcaraan moden, menggunakan jenis yang tidak ditandatangani untuk operasi berangka amat tidak digalakkan kerana kelemahan yang wujud.

Atas ialah kandungan terperinci Mengapakah `size_t` Tidak Ditandatangani Walaupun Kelemahan Diketahui?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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