size_t
Ve arasında bir fark var mı container::size_type
?
Anladığım şey size_t
daha genel ve herhangi bir size_type
e-posta için kullanılabilir .
Ancak container::size_type
belirli konteyner türleri için optimize edilmiş mi?
size_t
Ve arasında bir fark var mı container::size_type
?
Anladığım şey size_t
daha genel ve herhangi bir size_type
e-posta için kullanılabilir .
Ancak container::size_type
belirli konteyner türleri için optimize edilmiş mi?
Yanıtlar:
Standart kaplar , tipik olarak (veya uyumlu bir tür) olarak tanımlanan (Ayırıcı bir şablon parametresidir) size_type
için typedef olarak tanımlanır . Yani standart durum için bunlar aynı.Allocator::size_type
std::allocator<T>::size_type
size_t
Bununla birlikte, özel bir ayırıcı kullanırsanız, farklı bir temel tür kullanılabilir. Bu yüzden container::size_type
maksimum genellik için tercih edilir.
size_t
bahis bu kısıtlamaların pratik uygulamasıydı. Ancak, C ++ 11'de artık temelde şu şekilde tanımlanmaktadır: std::make_unsigned<X::difference_type>::type
varsayılan olarak. Pratikte muhtemelen aynı veya uyumlu olacaktır size_t
.
size_type
kullanımdan kaldırıldığına dair ipucu verecek hiçbir şey görmüyorum . Ne oluyor?
size_t
bir nesnenin boyutu için kullanılan tür olarak tanımlanır ve platforma bağlıdır .container::size_type
kaptaki öğe sayısı için kullanılan ve kaba bağımlı olan türdür .Tüm std
kaplar size_t
olarak kullanılır size_type
, ancak her bağımsız kitaplık satıcısı, kabı için uygun bulduğu bir türü seçer.
Bakarsan qt, size_type
Qt kapsayıcılarının sürüme bağlı olduğunu göreceksiniz . Vt3'te öyleydi unsigned int
ve Vt4'te olarak değiştirildi int
.
int
ziyade ssize_t
, int
küçük türüdür.
Çünkü std::[w]string
, std::[w]string::size_type
eşittir std::allocator<T>::size_type
, eşittir std::size_t
. Diğer kapsayıcılar için, bazı uygulama tanımlı işaretsiz tamsayı türüdür.
Bazen tam türüne sahip olmak yararlıdır, bu nedenle örneğin yazının nereye (gibi UINT_MAX
) sarıldığını bilir, böylece onu kullanabiliriz. Ya da işlev / sınıf şablonlarına gerçekten aynı iki türü geçirmeniz gereken şablonlar için.
Genellikle size_t
kısalık veya yinelemeler için kullandığımı buluyorum . Genel kodda, genellikle şablonunuzun hangi konteyner örneğiyle kullanıldığını ve bu konteynerlerin hangi boyutta olduğunu bilmediğiniz Container::size_type
için, konteyner boyutunu saklamanız gerekirse typedef'i kullanmanız gerekecektir.
N1804
ve ben arasında herhangi bir ilişki görmüyorumAllocator::size_type
vesize_type
. Libstdc ++ 'ya hızlı bir bakış da buna benzer bir şey göstermez.