Apakah ada perbedaan antara size_tdancontainer::size_type ?
Apa yang saya pahami size_tlebih umum dan dapat digunakan untuk size_types semua .
Tetapi apakah container::size_typedioptimalkan untuk jenis wadah tertentu?
Apakah ada perbedaan antara size_tdancontainer::size_type ?
Apa yang saya pahami size_tlebih umum dan dapat digunakan untuk size_types semua .
Tetapi apakah container::size_typedioptimalkan untuk jenis wadah tertentu?
Jawaban:
Kontainer standar mendefinisikan size_typesebagai typedef ke Allocator::size_type(Allocator adalah parameter template), yang untuk std::allocator<T>::size_typeini 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_typelebih disukai untuk umum maksimum.
size_tapakah taruhan implementasi praktis dari kendala tersebut. Namun, di C ++ 11, sekarang pada dasarnya didefinisikan sebagai: std::make_unsigned<X::difference_type>::typesecara default. Yang dalam prakteknya, mungkin akan sama atau cocok dengannya size_t.
size_typedeprecation. Apa yang memberi?
size_tdidefinisikan sebagai tipe yang digunakan untuk ukuran sebuah objek dan bergantung pada platform .container::size_typeadalah tipe yang digunakan untuk jumlah elemen dalam penampung dan bergantung pada penampung .Semua stdpenampung digunakan size_tsebagai size_type, tetapi setiap vendor pustaka independen memilih jenis yang menurutnya sesuai untuk penampungnya.
Jika Anda melihat qt, Anda akan menemukan bahwa size_typekontainer Qt bergantung pada versi. Di Qt3 itu unsigned intdan di Qt4 itu diubah menjadi int.
intbukan ssize_t, intagak kecil.
Karena std::[w]string, std::[w]string::size_typesama 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_tuntuk 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_typetypedef jika Anda perlu menyimpan ukuran kontainer.
N1804dan saya tidak melihat adanya hubungan antaraAllocator::size_typedansize_type. Sekilas libstdc ++ tidak menunjukkan sesuatu yang mirip dengan ini juga.