Bu cevap gerçekten kodunuzu kimlerin kullanacağına ve hangi standartları görmek istediklerine bağlıdır.
size_t
amacı olan bir tamsayı boyutudur:
Tür size_t
, herhangi bir nesnenin bayt cinsinden boyutu içerebilecek kadar büyük olan, uygulama tanımlı, imzasız bir tamsayı türüdür. (C ++ 11 spesifikasyonu 18.2.6)
Bu nedenle, bayt cinsinden nesnelerin boyutu ile çalışmak istediğinizde , kullanmalısınız size_t
. Şimdi birçok durumda, bayt saymak için bu boyutları / dizinleri kullanmıyorsunuz, ancak çoğu geliştirici size_t
tutarlılık için orada kullanmayı seçiyor .
Sınıfınızın bir STL sınıfının görünümü ve hissine sahip olması gerekiyorsa daima kullanmanız gerektiğini unutmayın size_t
. Spesifikasyondaki tüm STL sınıfları kullanılır size_t
. Derleyicinin typedef size_t
olması için unsigned int
geçerlidir ve typedef'in olması da geçerlidir unsigned long
. Doğrudan int
veya long
doğrudan kullanırsanız , sonunda sınıfınızı takip eden bir kişinin STL'nin stilini takip ettiğini düşünen derleyicilere koşacaksınız çünkü standardı takip etmediniz.
İmzalı türleri kullanmaya gelince, birkaç avantajı vardır:
- Daha kısa adlar - insanların yazması gerçekten kolaydır
int
, ancak kodu karıştırmak çok daha zordur unsigned int
.
- Her boyut için bir tam sayı - 32 bitlik tek bir CLS uyumlu tam sayı vardır, bu da Int32'dir. C ++ 'da iki (
int32_t
ve uint32_t
) vardır. Bu, API birlikte çalışabilirliğini basitleştirebilir
İmzalı türlerin en büyük dezavantajı barizdir: alan adınızın yarısını kaybedersiniz. İmzalı bir sayı, imzasız bir sayı kadar yüksek sayılamaz. C / C ++ geldiğinde bu çok önemliydi. İşlemcinin tam kapasitesini ele alabilmek ve imzasız sayılar kullanmanız için bunu yapmanız gerekiyordu.
.NET'in hedeflediği uygulama türleri için, tam etki alanı imzasız bir dizine ihtiyaç duyulmamıştır. Bu sayıların amaçlarının çoğu yönetilen bir dilde geçersizdir (bellek havuzlaması akla gelir). Ayrıca, .NET'in ortaya çıkmasıyla, 64 bit bilgisayarlar açık bir şekilde gelecekti. 64 bitlik bir tam sayı aralığına ihtiyaç duymaktan çok uzaktayız, bu yüzden bir biti feda etmek eskisi kadar acı verici değildir. Gerçekten 4 milyar dizine ihtiyacınız varsa, 64 bitlik tamsayılara geçmeniz yeterlidir. En kötüsü, 32 bitlik bir makinede çalıştırıyorsunuz ve biraz yavaş.
Ticareti kolaylık olarak görüyorum. Asla hiç kullanmayacağınız dizin türünüzün bir kısmını boşa harcamayıncaya kadar yeterli bilgi işlem gücüne sahipseniz, sadece yazmak int
veya long
ondan uzaklaşmak uygundur. Bu son parçayı gerçekten istediğinizi düşünüyorsanız, muhtemelen sayılarınızın imzasına dikkat etmelisiniz.
-1
"bulunamadı" veya "aralık dışında" belirtmek için bir dizin döndüren işlevlerden döndürülür. AyrıcaCompare()
işlevlerden döndürülür (uygulamaIComparable
). 32 bit int, genel bir sayı için türe gitme olarak kabul edilir, umarım açık nedenlerdir.