Dalam C ++, size_t
(atau, lebih tepatnya T::size_type
yang "biasanya" size_t
; yaitu, unsigned
tipe) digunakan sebagai nilai balik untuk size()
, argumen ke operator[]
, dll. (Lihat std::vector
, et. Al.)
Di sisi lain, bahasa .NET menggunakan int
(dan, opsional, long
) untuk tujuan yang sama; bahkan, bahasa yang sesuai dengan CLS tidak diperlukan untuk mendukung jenis yang tidak ditandatangani .
Mengingat bahwa .NET lebih baru daripada C ++, sesuatu memberi tahu saya bahwa mungkin ada masalah menggunakan unsigned int
bahkan untuk hal-hal yang "tidak mungkin" menjadi negatif seperti indeks atau panjang array. Apakah pendekatan C ++ "artefak historis" untuk kompatibilitas mundur? Atau adakah pertukaran desain nyata dan signifikan antara kedua pendekatan?
Mengapa ini penting? Nah ... apa yang harus saya gunakan untuk kelas multi-dimensi baru di C ++; size_t
atau 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
dikembalikan dari fungsi yang mengembalikan indeks, untuk menunjukkan "tidak ditemukan" atau "di luar jangkauan." Itu juga dikembalikan dariCompare()
fungsi (implementasiIComparable
). Int 32 bit dianggap sebagai tipe ketikan untuk nomor umum, karena saya harap alasan yang jelas.