มีความแตกต่างระหว่างsize_tและcontainer::size_typeหรือไม่?
สิ่งที่ฉันเข้าใจคือsize_tทั่วไปกว่าและสามารถใช้กับsize_types ใดก็ได้
แต่container::size_typeเหมาะสำหรับคอนเทนเนอร์บางประเภทหรือไม่?
มีความแตกต่างระหว่างsize_tและcontainer::size_typeหรือไม่?
สิ่งที่ฉันเข้าใจคือsize_tทั่วไปกว่าและสามารถใช้กับsize_types ใดก็ได้
แต่container::size_typeเหมาะสำหรับคอนเทนเนอร์บางประเภทหรือไม่?
คำตอบ:
ภาชนะบรรจุที่มาตรฐานกำหนดsize_typeเป็น typedef ให้Allocator::size_type(จัดสรรเป็นพารามิเตอร์ที่ template) ซึ่งstd::allocator<T>::size_typeเป็นมักจะกำหนดให้เป็นsize_t(หรือชนิดที่เข้ากันได้) ดังนั้นสำหรับกรณีมาตรฐานจะเหมือนกัน
อย่างไรก็ตามหากคุณใช้ตัวจัดสรรแบบกำหนดเองอาจใช้ประเภทพื้นฐานอื่นได้ ดังนั้นจึงcontainer::size_typeเป็นที่นิยมสำหรับความทั่วไปสูงสุด
size_tนั้นการเดิมพันในทางปฏิบัติของข้อ จำกัด เหล่านั้นคืออะไร อย่างไรก็ตามใน C ++ 11 ตอนนี้ถูกกำหนดโดยพื้นฐานเป็น: std::make_unsigned<X::difference_type>::typeโดยค่าเริ่มต้น size_tซึ่งในทางปฏิบัติอาจจะเป็นเหมือนกันหรือเข้ากันได้กับ
size_typeเลิกใช้งาน สิ่งที่ช่วยให้?
size_tถูกกำหนดให้เป็นชนิดที่ใช้สำหรับขนาดของวัตถุและขึ้นอยู่กับแพลตฟอร์มcontainer::size_typeเป็นชนิดที่ใช้สำหรับจำนวนขององค์ประกอบในภาชนะและเป็นภาชนะขึ้นstdคอนเทนเนอร์ทั้งหมดใช้size_tเป็นsize_typeแต่ผู้ให้บริการไลบรารีอิสระแต่ละรายจะเลือกประเภทที่พบว่าเหมาะสมกับคอนเทนเนอร์ของตน
หากคุณมองไปที่ qtคุณจะพบว่าsize_typeคอนเทนเนอร์ Qt ขึ้นอยู่กับเวอร์ชัน ใน Qt3 คือunsigned intและใน Qt4 เปลี่ยนเป็นint.
intมากกว่าssize_t, intเป็นชนิดของขนาดเล็ก
สำหรับstd::[w]string, std::[w]string::size_typeคือการที่เท่าเทียมกันซึ่งจะมีค่าเท่ากับstd::allocator<T>::size_type std::size_tสำหรับคอนเทนเนอร์อื่น ๆ เป็นการใช้งานบางประเภทที่กำหนดประเภทจำนวนเต็มที่ไม่ได้ลงนาม
บางครั้งการมีประเภทที่แน่นอนก็มีประโยชน์ตัวอย่างเช่นเรารู้ว่าประเภทนั้นล้อมรอบไปที่ใด (like, to UINT_MAX) เพื่อให้สามารถใช้ประโยชน์จากสิ่งนั้นได้ หรือสำหรับเทมเพลตที่คุณต้องส่งผ่านสองประเภทที่เหมือนกันไปยังเทมเพลตฟังก์ชัน / คลาส
บ่อยครั้งที่ฉันพบว่าฉันใช้size_tเพื่อความกะทัดรัดหรือทำซ้ำอยู่แล้ว ในโค้ดทั่วไปเนื่องจากโดยทั่วไปคุณไม่ทราบว่าเทมเพลตของคุณใช้กับอินสแตนซ์คอนเทนเนอร์ใดและคอนเทนเนอร์เหล่านั้นมีขนาดเท่าใดคุณจะต้องใช้Container::size_typetypedef หากคุณต้องการจัดเก็บขนาดคอนเทนเนอร์
N1804และฉันไม่เห็นความสัมพันธ์ระหว่างและAllocator::size_typesize_typeการดูอย่างรวดเร็วที่ libstdc ++ ไม่แสดงสิ่งที่คล้ายกับสิ่งนี้