Czy jest różnica między size_t
i container::size_type
?
Rozumiem, że size_t
jest bardziej ogólny i może być używany do dowolnych celów size_type
.
Ale czy jest container::size_type
zoptymalizowany pod kątem określonych rodzajów pojemników?
c++
size-type
container-data-type
Charles Khunt
źródło
źródło
N1804
i nie widzę żadnego związku międzyAllocator::size_type
isize_type
. Szybki rzut oka na libstdc ++ również nie pokazuje niczego podobnego.size_t
czasie zakład był praktyczną implementacją tych ograniczeń. Jednak w C ++ 11 jest teraz zasadniczo zdefiniowany jako:std::make_unsigned<X::difference_type>::type
domyślnie. Który w praktyce prawdopodobnie będzie taki sam lub zgodny zsize_t
.size_type
wycofanie. Co daje?size_t
jest definiowany jako typ używany do wielkości obiektu i zależy od platformy .container::size_type
jest typem używanym dla liczby elementów w kontenerze i zależy od kontenera .Wszystkie
std
kontenery są używanesize_t
jakosize_type
, ale każdy niezależny dostawca biblioteki wybiera typ, który uzna za odpowiedni dla swojego kontenera.Jeśli spojrzysz na qt, przekonasz się, że
size_type
kontenery z Qt są zależne od wersji. W Qt3 było,unsigned int
aw Qt4 zostało zmienione naint
.źródło
int
raczej niessize_t
,int
jest trochę mała.Na
std::[w]string
,std::[w]string::size_type
jest równastd::allocator<T>::size_type
, co jest równestd::size_t
. W przypadku innych kontenerów jest to jakaś implementacja zdefiniowana jako liczba całkowita bez znaku.Czasami przydatne jest posiadanie dokładnego typu, więc na przykład wiadomo, gdzie typ zawija się do (like, to
UINT_MAX
), aby można było to wykorzystać. Lub w przypadku szablonów, w których naprawdę musisz przekazać dwa identyczne typy do szablonów funkcji / klas.Często i tak używam
size_t
dla zwięzłości lub iteratorów. W kodzie ogólnym, ponieważ generalnie nie wiesz, z jaką instancją kontenera jest używany Twój szablon i jaki rozmiar mają te kontenery, będziesz musiał użyćContainer::size_type
czcionki typedef, jeśli chcesz zapisać rozmiar kontenera.źródło