Questa risposta dipende veramente da chi utilizzerà il tuo codice e da quali standard vogliono vedere.
size_t
è una dimensione intera con uno scopo:
The type size_t
is an implementation-defined unsigned integer type that is large enough to contain the size in bytes of any object. (C++11 specification 18.2.6)
Quindi, ogni volta che desideri lavorare con la dimensione degli oggetti in byte, dovresti usare size_t
. Ora, in molti casi, non stai utilizzando queste dimensioni / indici per contare i byte, ma la maggior parte degli sviluppatori sceglie di utilizzare size_t
per coerenza.
Si noti che si dovrebbe sempre utilizzare size_t
se si desidera che la classe abbia l'aspetto di una classe STL. Tutte le classi STL nella specifica utilizzano size_t
. È valido per il compilatore digitare typedef size_t
per essere unsigned int
, ed è anche valido per essere digitato in unsigned long
. Se usi int
o long
direttamente, finirai per entrare in compilatori in cui una persona che pensa che la tua classe abbia seguito lo stile di STL viene intrappolata perché non hai seguito lo standard.
Per quanto riguarda l'utilizzo di tipi firmati, ci sono alcuni vantaggi:
- Nomi più corti: è molto facile per le persone digitare
int
, ma è molto più difficile ingombrare il codice con unsigned int
.
- Un numero intero per ogni dimensione - Esiste solo un intero conforme a CLS di 32-bit, che è Int32. In C ++ ce ne sono due (
int32_t
e uint32_t
). Questo può semplificare l'interoperabilità delle API
Il grosso svantaggio dei tipi firmati è ovvio: perdi metà del tuo dominio. Un numero firmato non può contare fino a un numero senza segno. Quando C / C ++ è venuto in giro, questo era molto importante. Uno doveva essere in grado di affrontare tutte le funzionalità del processore, e per farlo era necessario usare numeri non firmati.
Per i tipi di applicazioni .NET mirate, non c'era la necessità di un indice senza segno completo di dominio. Molti degli scopi di tali numeri sono semplicemente non validi in un linguaggio gestito (viene in mente il pooling della memoria). Inoltre, quando .NET è uscito, i computer a 64 bit erano chiaramente il futuro. Siamo molto lontani dall'avere bisogno dell'intera gamma di numeri interi a 64 bit, quindi sacrificare un po 'non è così doloroso come prima. Se hai davvero bisogno di 4 miliardi di indici, passa semplicemente a utilizzare numeri interi a 64 bit. Nel peggiore dei casi, lo esegui su una macchina a 32 bit ed è un po 'lento.
Vedo il commercio come uno di convenienza. Se ti capita di avere abbastanza potenza di calcolo che non ti dispiace sprecare un po 'del tuo tipo di indice che non userai mai e poi mai, allora è conveniente digitare int
o long
e allontanarti da esso. Se trovi che volevi davvero quell'ultimo bit, probabilmente dovresti aver prestato attenzione alla firma dei tuoi numeri.