Apakah ada perbedaan antara size_t
dancontainer::size_type
?
Apa yang saya pahami size_t
lebih umum dan dapat digunakan untuk size_type
s semua .
Tetapi apakah container::size_type
dioptimalkan untuk jenis wadah tertentu?
Apakah ada perbedaan antara size_t
dancontainer::size_type
?
Apa yang saya pahami size_t
lebih umum dan dapat digunakan untuk size_type
s semua .
Tetapi apakah container::size_type
dioptimalkan untuk jenis wadah tertentu?
Jawaban:
Kontainer standar mendefinisikan size_type
sebagai typedef ke Allocator::size_type
(Allocator adalah parameter template), yang untuk std::allocator<T>::size_type
ini biasanya didefinisikan sebagaisize_t
(atau jenis yang kompatibel). Jadi untuk case standar, keduanya sama.
Namun, jika Anda menggunakan pengalokasi khusus, jenis dasar yang berbeda dapat digunakan. Jadi container::size_type
lebih disukai untuk umum maksimum.
size_t
apakah taruhan implementasi praktis dari kendala tersebut. Namun, di C ++ 11, sekarang pada dasarnya didefinisikan sebagai: std::make_unsigned<X::difference_type>::type
secara default. Yang dalam prakteknya, mungkin akan sama atau cocok dengannya size_t
.
size_type
deprecation. Apa yang memberi?
size_t
didefinisikan sebagai tipe yang digunakan untuk ukuran sebuah objek dan bergantung pada platform .container::size_type
adalah tipe yang digunakan untuk jumlah elemen dalam penampung dan bergantung pada penampung .Semua std
penampung digunakan size_t
sebagai size_type
, tetapi setiap vendor pustaka independen memilih jenis yang menurutnya sesuai untuk penampungnya.
Jika Anda melihat qt, Anda akan menemukan bahwa size_type
kontainer Qt bergantung pada versi. Di Qt3 itu unsigned int
dan di Qt4 itu diubah menjadi int
.
int
bukan ssize_t
, int
agak kecil.
Karena std::[w]string
, std::[w]string::size_type
sama dengan std::allocator<T>::size_type
, yang sama dengan std::size_t
. Untuk penampung lain, itu beberapa implementasi yang ditentukan jenis integer tidak bertanda tangan.
Kadang-kadang berguna untuk memiliki tipe yang tepat, jadi misalnya seseorang tahu di mana tipe tersebut membungkus (like, to UINT_MAX
) sehingga dia dapat memanfaatkannya. Atau untuk template, di mana Anda benar-benar perlu meneruskan dua jenis yang identik ke template fungsi / kelas.
Seringkali saya menemukan saya menggunakan size_t
untuk singkatnya atau iterator. Dalam kode generik, karena Anda umumnya tidak tahu dengan contoh kontainer apa template Anda digunakan dan berapa ukuran kontainer itu, Anda harus menggunakan Container::size_type
typedef jika Anda perlu menyimpan ukuran kontainer.
N1804
dan saya tidak melihat adanya hubungan antaraAllocator::size_type
dansize_type
. Sekilas libstdc ++ tidak menunjukkan sesuatu yang mirip dengan ini juga.