size_tVe arasında bir fark var mı container::size_type?
Anladığım şey size_tdaha genel ve herhangi bir size_typee-posta için kullanılabilir .
Ancak container::size_typebelirli konteyner türleri için optimize edilmiş mi?
size_tVe arasında bir fark var mı container::size_type?
Anladığım şey size_tdaha genel ve herhangi bir size_typee-posta için kullanılabilir .
Ancak container::size_typebelirli 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_typeiçin typedef olarak tanımlanır . Yani standart durum için bunlar aynı.Allocator::size_typestd::allocator<T>::size_typesize_t
Bununla birlikte, özel bir ayırıcı kullanırsanız, farklı bir temel tür kullanılabilir. Bu yüzden container::size_typemaksimum genellik için tercih edilir.
size_tbahis 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>::typevarsayılan olarak. Pratikte muhtemelen aynı veya uyumlu olacaktır size_t.
size_typekullanımdan kaldırıldığına dair ipucu verecek hiçbir şey görmüyorum . Ne oluyor?
size_tbir nesnenin boyutu için kullanılan tür olarak tanımlanır ve platforma bağlıdır .container::size_typekaptaki öğe sayısı için kullanılan ve kaba bağımlı olan türdür .Tüm stdkaplar size_tolarak 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_typeQt kapsayıcılarının sürüme bağlı olduğunu göreceksiniz . Vt3'te öyleydi unsigned intve Vt4'te olarak değiştirildi int.
intziyade ssize_t, intküçük türüdür.
Çünkü std::[w]string, std::[w]string::size_typeeş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_tkı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_typeiçin, konteyner boyutunu saklamanız gerekirse typedef'i kullanmanız gerekecektir.
N1804ve ben arasında herhangi bir ilişki görmüyorumAllocator::size_typevesize_type. Libstdc ++ 'ya hızlı bir bakış da buna benzer bir şey göstermez.