Per std::[w]string
, std::[w]string::size_type
è uguale a std::allocator<T>::size_type
, che è uguale al std::size_t
. Per altri contenitori, è un tipo di intero senza segno definito dall'implementazione.
A volte è utile avere il tipo esatto, quindi ad esempio si sa dove si trova il tipo (come, ad esempio UINT_MAX
) in modo che si possa fare uso di quello. Oppure per i modelli, in cui è necessario passare due tipi identici a modelli di funzione/classe.
Spesso trovo che uso size_t
per brevità o iteratori comunque. Nel codice generico, poiché generalmente non si conosce con quale istanza contenitore viene utilizzato il modello e quali dimensioni hanno questi contenitori, sarà necessario utilizzare il typedef Container::size_type
se è necessario memorizzare le dimensioni dei contenitori.
fonte
2009-05-28 00:14:14
Potete chiarire questa risposta? Ho guardato indietro agli standard di draft fin da 'N1804' e non vedo alcuna relazione tra' Allocator :: size_type' e 'size_type'. Una rapida occhiata a libstdC++ non mostra nulla di simile a questo neanche. –
@ShafikYaghmour, Quindi questa risposta è leggermente superata, ma per massimizzare la portabilità penso che il consiglio sia ancora valido: C++ 03 ha specificato "Table 32: size_type: un tipo che può rappresentare la dimensione dell'oggetto più grande nel modello di allocazione. " Al momento, 'size_t' è stata la scommessa sull'implementazione pratica di questi vincoli. Tuttavia, in C++ 11, è ora definito essenzialmente come: 'std :: make_unsigned :: type' di default. Il che, in pratica, sarà probabilmente lo stesso o compatibile con 'size_t'. –
CARE la risposta è errata .... vedere http: // stackoverflow.it/questions/4849678/c-per-loop-size-type-vs-size-t TL: DR: gli allocatori size_type devono essere size_t e in C++ 17 size_type sarà deprecato così com'è. – user3063349