Chris'in akıl yürütme çizgisine derinden sempati duymamıza rağmen, ben burada aynı fikirde değilim (en azından kısmen, şeytanın avukatını oynuyorum). Boyutlar için imzasız türlerin kullanılmasında yanlış bir şey yoktur ve hatta bazı durumlarda faydalı olabilir.
Chris'in imzalı boyut türleri için gerekçesi doğal olarak dizi indisleri olarak kullanılmaları ve dizi endekslerinde aritmetik yapmak isteyebilirsiniz ve aritmetik negatif olan geçici değerler oluşturabilir.
Bu iyi ve imzasız bir aritmetik, karşılaştırma yaparken değerlerinizi doğru şekilde yorumladığınızdan emin olduğunuz sürece sorun yaratmaz. İmzasız tamsayıların taşma davranışı tamamen belirtildiği için, negatif aralığa (veya büyük pozitif sayılara) geçici olarak taşan değerler, bir karşılaştırma yapılmadan önce düzeltildikleri sürece herhangi bir hata vermezler. İmzasız aritmetiğin taşma davranışı, belirli aralık kontrollerini, aksi takdirde iki karşılaştırmayı gerektirecek tek bir karşılaştırma olarak ifade edebildiği için, taşma davranışı da istenmektedir. Ben x
aralığında [a,b]
olduğunu ve tüm değerler imzasız olup olmadığını kontrol etmek istiyorsanız, ben sadece bunu yapabilirsiniz:
imzalı değişkenlerle çalışmıyor
if (x - a < b) {
}
; Bu tür aralık kontrolleri boyutları ve dizi ofsetleri ile oldukça yaygındır.
Bundan önce bahsettiğim, bir fayda taşma aritmetiğinin sonuçları tanımladığıdır. Dizin aritmetiğiniz imzalı bir türden taşarsa, davranış tanımlanır; Programınızı taşınabilir hale getirmenin bir yolu yoktur. İmzasız bir tür kullanın ve bu sorun gider. Kuşkusuz bu sadece büyük ofsetleri için geçerlidir, ancak bazı kullanımlar için bir endişe kaynağıdır. Temel olarak, imzasız türlere karşı itirazlar sıklıkla abartılmaktadır.Asıl sorun, çoğu programcının yazdıkları kodun tam anlamını düşünmedikleri ve küçük tamsayı değerleri için, imzalı türlerin sezgileriyle daha yakın davrandıklarıdır. Bununla birlikte, veri boyutları oldukça hızlı büyür. Arabelleklerle veya veritabanlarıyla uğraşırken, genellikle "küçük" aralığın dışında kalırız ve imzalı taşma, imzasız taşma işleminden daha doğru bir şekilde işlemek için çok daha sorunludur. Çözüm "imzasız türler kullanmayın" değil, "yazdığınız kod hakkında dikkatlice düşünün ve anladığınızdan emin olun".
"Yalnızca", oldukça güçlü bir belirticidir. – Sapph
Özel bir durum, [imzalı/imzasız] char'ların bir dizisidir. Bu durumda, modül aritmetiği aynı sonucu iki tamamlayıcı gösterim platformunda ( –
) verir. Daha genel bir noktaya katılıyorum, ancak, imzasız türlerin, doküman olarak yaygın olarak kullanılan rollerinde abartıldığını görüyorum. –