ใน C ++, size_t
(หรืออย่างถูกต้องมากขึ้นT::size_type
ซึ่งเป็น "มักจะ" size_t
; เช่นunsigned
ประเภท) จะใช้เป็นค่าตอบแทนสำหรับsize()
อาร์กิวเมนต์เพื่อoperator[]
ฯลฯ (ดูstd::vector
, et. al.)
ในทางตรงกันข้ามภาษา. NET ใช้int
(และเลือกlong
) เพื่อจุดประสงค์เดียวกัน ในความเป็นจริงที่สอดคล้องกับ CLS ภาษาไม่จำเป็นต้องสนับสนุนประเภทที่ไม่ได้ลงชื่อ
เนื่องจาก. NET นั้นใหม่กว่า C ++ มีบางสิ่งที่บอกฉันว่าอาจมีปัญหาในการใช้งานunsigned int
แม้กระทั่งสิ่งที่ "ไม่สามารถ" เป็นลบได้เช่นดัชนีอาร์เรย์หรือความยาว C ++ เป็น "วัตถุทางประวัติศาสตร์" สำหรับความเข้ากันได้แบบย้อนหลังหรือไม่? หรือมีการแลกเปลี่ยนการออกแบบที่แท้จริงและสำคัญระหว่างสองแนวทาง
เหตุใดเรื่องนี้ อืม ... ฉันควรใช้อะไรกับคลาสหลายมิติใหม่ใน C ++; size_t
หรือint
?
struct Foo final // e.g., image, matrix, etc.
{
typedef int32_t /* or int64_t*/ dimension_type; // *OR* always "size_t" ?
typedef size_t size_type; // c.f., std::vector<>
dimension_type bar_; // maybe rows, or x
dimension_type baz_; // e.g., columns, or y
size_type size() const { ... } // STL-like interface
};
-1
จะถูกส่งคืนจากฟังก์ชั่นที่คืนค่าดัชนีเพื่อระบุว่า "ไม่พบ" หรือ "อยู่นอกช่วง" มันกลับมาจากCompare()
ฟังก์ชั่น (การนำไปใช้IComparable
) int 32 บิตถูกพิจารณาว่าเป็นประเภทสำหรับหมายเลขทั่วไปสำหรับสิ่งที่ฉันหวังว่าเป็นเหตุผลที่ชัดเจน