Für std::[w]string
ist std::[w]string::size_type
gleich std::allocator<T>::size_type
, was gleich std::size_t
ist. Bei anderen Containern ist eine Implementierung als vorzeichenloser Integer-Typ definiert.
Manchmal ist es nützlich, den genauen Typ zu haben, also weiß man zum Beispiel, wo der Typ sich umschlingt (wie zum Beispiel UINT_MAX
), damit man davon Gebrauch machen kann. Oder für Vorlagen, wo Sie wirklich zwei identische Typen an Funktions-/Klassenvorlagen übergeben müssen.
Oft finde ich size_t
für die Kürze oder Iteratoren sowieso. Da Sie im allgemeinen Code nicht wissen, mit welcher Containerinstanz Ihre Vorlage verwendet wird und welche Größe diese Container haben, müssen Sie Container::size_type
typedef verwenden, wenn Sie die Containergröße speichern müssen.
Können Sie diese Antwort klären? Ich habe auf den Entwurf der Standards zurück bis 'N1804' geschaut und ich sehe keine Beziehung zwischen' Allocator :: size_type' und 'size_type'. Ein kurzer Blick auf libstdC++ zeigt auch nichts Ähnliches. –
@ShafikYaghmour, Also diese Antwort ist etwas veraltet, aber um die Portabilität zu maximieren, denke ich, der Rat ist immer noch solide: C++ 03 angegeben "Tabelle 32: size_type: ein Typ, der die Größe des größten Objekts im Zuordnungsmodell darstellen kann. " Zu der Zeit war 'size_t' die Wette praktische Umsetzung dieser Einschränkungen. In C++ 11 wird es jetzt jedoch im Wesentlichen wie folgt definiert: "std :: make_unsigned :: type". Was in der Praxis wahrscheinlich gleich oder kompatibel mit 'size_t' sein wird. –
CARE die Antwort ist falsch .... siehe http: // stackoverflow.com/questions/4849678/c-for-Schleife-Größe-Typ-vs-Größe-t TL: DR: Zuweiser size_type muss size_t sein und in C++ 17 size_type wird veraltet wie es ist. – user3063349