2015-08-31 14 views
10

In termini più pratici: Quale tipo di dati intero dovrei usare per indici in un vettore, lunghezza di matrici, ecc.?Qual è l'equivalente di Rust di `size_t`?

Ci sono molte discussioni su questo argomento per la ruggine precedente alla 1.0 che circolano su Internet e non riesco a trovare una risposta autorevole sulla decisione finale.

risposta

11

Questo sarebbe usize e isize (tipi di dimensioni puntatore, senza segno e firmati). Il reference dice che la dimensione massima di un array è il valore massimo di isize tale che è possibile calcolare le differenze di posizione.

Le funzioni di std::Vec utilizzano usize per tutti gli indici, tuttavia.

+1

Si noti che su un sistema a 32 bit, 'isize' è limitato a 32 bit, quindi questo effettivamente limita le dimensioni di un array a 2 GB anche se sono disponibili 4 GB. Su 64 bit, dubito che sarà un problema. –

+1

@MatthieuM .: su piattaforme con 64 bit esistenti gli indirizzi sono solo 48 bit, quindi 63 bit è ampio. –

+3

@MatthieuM. perché è 2GB e non 2G elementi? –