Rumah >pembangunan bahagian belakang >C++ >Mengapakah `size_t` Tidak Ditandatangani dalam C/C : Keperluan Sejarah atau Magnet Pepijat Moden?

Mengapakah `size_t` Tidak Ditandatangani dalam C/C : Keperluan Sejarah atau Magnet Pepijat Moden?

Barbara Streisand
Barbara Streisandasal
2024-10-29 07:39:30283semak imbas

 Why is `size_t` Unsigned in C/C  : A Historical Necessity or a Modern Bug Magnet?

Mengapa size_t Tidak Ditandatangani?

Pemerhatian Bjarne Stroustrup bahawa "menggunakan unsigned dan bukannya int untuk mendapatkan satu bit lagi untuk mewakili integer positif hampir tidak pernah menjadi idea yang baik" telah menimbulkan kebimbangan tentang keputusan untuk membuat size_t tidak ditandatangani.

Asal-usul Sejarah

Pada asalnya, size_t dibuat tanpa tanda tangan untuk menampung seni bina dengan penunjuk 16-bit, seperti sistem DOS. Untuk mengelakkan pengehadan saiz rentetan, ptrdiff_t mandat C standard, rakan sejawat size_t yang ditandatangani, menjadi 17 bit dengan berkesan.

Perkaitan Semasa

Walaupun sebab sejarah ini mungkin masih boleh digunakan dalam sistem terbenam, mereka kurang begitu untuk pengaturcaraan 32-bit dan 64-bit moden. Dalam persekitaran ini, tiada kelebihan praktikal untuk menggunakan jenis yang tidak ditandatangani untuk nombor dan penggunaannya boleh memperkenalkan pepijat yang berpotensi disebabkan oleh peraturan penukaran tersirat C/C (mis., di mana rentetan("Hai").length() < -3) .

Kesimpulan

Keputusan untuk membuat saiz_t tidak ditandatangani bukanlah satu kesilapan, sebaliknya merupakan pilihan yang praktikal untuk sistem terhad pada zamannya. Walau bagaimanapun, dalam amalan pengaturcaraan moden, secara amnya dinasihatkan untuk meminimumkan penggunaan integer yang tidak ditandatangani dalam antara muka dan untuk nombor, kecuali untuk keadaan tertentu di mana sifat deskriptif kendiri typedef int MyType bermanfaat.

Atas ialah kandungan terperinci Mengapakah `size_t` Tidak Ditandatangani dalam C/C : Keperluan Sejarah atau Magnet Pepijat Moden?. 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