Câu trả lời này thực sự phụ thuộc vào người sẽ sử dụng mã của bạn và tiêu chuẩn họ muốn xem.
size_t
là một kích thước nguyên với mục đích:
Kiểu size_t
này là một kiểu số nguyên không dấu được xác định do triển khai đủ lớn để chứa kích thước tính theo byte của bất kỳ đối tượng nào. (Đặc tả C ++ 11 18.2.6)
Vì vậy, bất cứ lúc nào bạn muốn làm việc với kích thước của các đối tượng tính bằng byte, bạn nên sử dụng size_t
. Bây giờ, trong nhiều trường hợp, bạn không sử dụng các thứ nguyên / chỉ mục này để đếm byte, nhưng hầu hết các nhà phát triển chọn sử dụng size_t
ở đó để thống nhất.
Lưu ý rằng bạn phải luôn luôn sử dụng size_t
nếu lớp của bạn dự định có giao diện của lớp STL. Tất cả các lớp STL trong đặc tả sử dụng size_t
. Nó có giá trị cho các trình biên dịch để typedef size_t
được unsigned int
, và nó cũng có giá trị cho nó được typedefed tới unsigned long
. Nếu bạn sử dụng int
hoặc long
trực tiếp, cuối cùng bạn sẽ chạy vào trình biên dịch nơi một người nghĩ rằng lớp của bạn theo phong cách của STL bị mắc kẹt vì bạn không tuân theo tiêu chuẩn.
Đối với việc sử dụng các loại đã ký, có một vài lợi thế:
- Tên ngắn hơn - mọi người thực sự dễ dàng nhập
int
, nhưng khó khăn hơn nhiều để làm lộn xộn mã unsigned int
.
- Một số nguyên cho mỗi kích thước - Chỉ có một số nguyên 32 bit tuân thủ CLS, đó là Int32. Trong C ++, có hai (
int32_t
và uint32_t
). Điều này có thể làm cho khả năng tương tác API đơn giản hơn
Nhược điểm lớn của các loại đã ký là một điều hiển nhiên: bạn mất một nửa tên miền. Một số đã ký không thể được tính cao bằng số không dấu. Khi C / C ++ xuất hiện, điều này rất quan trọng. Một thứ cần thiết để có thể giải quyết toàn bộ khả năng của bộ xử lý và để làm được điều đó bạn cần sử dụng các số không dấu.
Đối với các loại ứng dụng .NET được nhắm mục tiêu, không có nhu cầu về chỉ mục không dấu tên miền đầy đủ. Nhiều mục đích cho những con số như vậy đơn giản là không hợp lệ trong một ngôn ngữ được quản lý (tập hợp bộ nhớ đến trong tâm trí). Ngoài ra, khi .NET ra đời, máy tính 64 bit rõ ràng là tương lai. Chúng ta còn lâu mới cần đến toàn bộ số nguyên 64 bit, nên hy sinh một bit không còn đau đớn như trước. Nếu bạn thực sự cần 4 tỷ chỉ mục, bạn chỉ cần chuyển sang sử dụng số nguyên 64 bit. Tệ nhất, bạn chạy nó trên máy 32 bit và hơi chậm.
Tôi xem thương mại là một trong những tiện lợi. Nếu bạn tình cờ có đủ sức mạnh tính toán mà bạn không ngại lãng phí một chút loại chỉ mục mà bạn sẽ không bao giờ sử dụng, thì thật tiện lợi khi chỉ cần gõ int
hoặc long
bỏ đi. Nếu bạn thấy bạn thực sự muốn chút cuối cùng đó, thì có lẽ bạn nên chú ý đến chữ ký của các số của bạn.
-1
được trả về từ các hàm trả về một chỉ mục, để chỉ ra "không tìm thấy" hoặc "ngoài phạm vi". Nó cũng được trả về từ cácCompare()
chức năng (thực hiệnIComparable
). Một int 32 bit được coi là đi để gõ cho một số chung, vì những gì tôi hy vọng là lý do rõ ràng.