Là người mới bắt đầu, tôi thực sự bối rối về size_t
. Tôi có thể sử dụng int
, float
hoặc các loại khác. Tại sao vẫn khai báo loại size_t
. Tôi không cảm thấy lợi thế của nó. Tôi đã xem một số pages, nhưng tôi vẫn không thể hiểu được.Tại sao tôi cần sử dụng `size_t` trong C++?
Trả lời
Lợi thế chính của nó là đó là công cụ thích hợp cho công việc.
size_t
được xác định là đủ lớn để thể hiện kích thước của bất kỳ đối tượng nào trên nền tảng của bạn. Những người khác thì không. Vì vậy, khi bạn muốn lưu trữ kích thước của một đối tượng, tại sao bạn lại sử dụng bất kỳ thứ gì khác?
Bạn có thể sử dụng int
nếu muốn, nhưng bạn sẽ cố ý chọn tùy chọn kém hơn dẫn đến lỗi. Tôi không hoàn toàn hiểu tại sao bạn muốn làm như vậy, nhưng đây là mã của bạn.
Nếu bạn chọn sử dụng float
, tuy nhiên, vui lòng cho chúng tôi biết bạn đang viết chương trình nào để chúng tôi có thể tránh. :)
Thêm vào đây: Ví dụ phổ biến là một hàm lấy chỉ mục vào một mảng, 'std :: vector' hoặc vùng chứa tương tự. 'size_t' là loại được bảo đảm đủ lớn để biểu thị tất cả các giá trị hợp pháp có thể là một chỉ mục hợp lệ vào vùng chứa đó. – mindriot
Chỉ cần khuấy động mọi thứ lên một chút, lưu ý rằng bạn nên sử dụng 'vector
Haha, tôi có thể nhận được nó! Cảm ơn! :) – kevin4z
Sử dụng float
sẽ thật khủng khiếp vì đó sẽ là lạm dụng các loại điểm nổi, cộng với loại quảng cáo có nghĩa là nhân kích thước của bất kỳ thứ gì sẽ diễn ra trong điểm nổi!
Sử dụng int
cũng sẽ rất kinh khủng vì các chi tiết cụ thể của một số int
được định nghĩa một cách cố ý theo tiêu chuẩn C++. (Nó có thể nhỏ đến 16 bit).
Nhưng loại size_t
được đảm bảo đại diện đầy đủ kích thước của khá nhiều thứ và chắc chắn kích thước của vùng chứa trong thư viện chuẩn C++. Chi tiết cụ thể của nó phụ thuộc vào một nền tảng và kiến trúc cụ thể. Thực tế rằng đó là loại không được ký là chủ đề của nhiều cuộc tranh luận. (Cá nhân tôi tin rằng nó là một sai lầm để làm cho nó unsigned
vì nó có thể mess up code bằng cách sử dụng các toán tử quan hệ và giới thiệu các lỗi nguy hiểm mà khó phát hiện).
'int được cố ý định nghĩa lỏng lẻo bởi Tiêu chuẩn C++. (Nó có thể nhỏ đến 16 bit) 'Tại sao? – vcp
Tôi không đồng ý với phần unsigned = mistake. Bản chất của các kích thước là chúng không thể là tiêu cực. Điều này được phản ánh độc đáo bằng cách sử dụng một loại unsigned, ngoài ra, bạn không vứt đi một nửa phạm vi của kiểu dữ liệu (trong bối cảnh kích thước không thể là âm). – Aconcagua
@vpc Vì nó sẽ đại diện cho kiểu dữ liệu có thể được xử lý hiệu quả nhất trên phần cứng mà mã được dự định chạy trên đó. Và e. g. trên bộ xử lý 16 bit, đây sẽ là kiểu dữ liệu 16 bit ... – Aconcagua
Tôi khuyên bạn nên sử dụng size_t bất cứ khi nào bạn muốn lưu trữ kích cỡ của lớp hoặc cấu trúc hoặc khi bạn xử lý bộ nhớ thô (ví dụ: lưu trữ kích thước bộ nhớ thô hoặc sử dụng làm chỉ mục của mảng thô). Tuy nhiên để lập chỉ mục/lặp qua các vùng chứa chuẩn (chẳng hạn như std :: vector), tôi khuyên bạn nên sử dụng loại kích thước cơ bản của một vùng chứa nhất định (ví dụ: vector :: size_type).
- 1. Tại sao tôi cần sử dụng ngắt?
- 2. Tại sao size_t tồn tại trong C/C++ và có thể/nên được thay thế?
- 3. Tại sao tôi cần sử dụng công cụ sửa đổi ảo trong lớp C#?
- 4. Tại sao tôi không cần sử dụng Adapter.notifyDataSetChanged()?
- 5. Tại sao tôi cần sử dụng self :: core :: ops?
- 6. C# Tại sao tôi không nên sử dụng coroutines?
- 7. Tại sao các thông số chức năng của loại size_t?
- 8. (Tại sao) tôi nên sử dụng obfuscation?
- 9. Tại sao tôi nên sử dụng 'áp dụng' trong Clojure?
- 10. Tại sao sử dụng chuỗi c trong c + +?
- 11. Tại sao tôi cần Giao diện?
- 12. Tại sao tôi cần truyền tự id?
- 13. Tại sao tôi nên sử dụng glBindAttribLocation?
- 14. Tại sao tôi cần phải #include <typeinfo> khi sử dụng toán tử typeid?
- 15. Tại sao tôi cần jsr305 để sử dụng ổi trong scala?
- 16. Tại sao tôi phải sử dụng $ (this)?
- 17. Xuất dll từ C++ sang C#. Tại sao tôi cần: "extern" C ""
- 18. Tại sao tôi cần chuyển đổi?
- 19. Tại sao tôi nên sử dụng Socket.io?
- 20. C# lớp tĩnh tại sao sử dụng?
- 21. Tại sao tôi cần Babel JS?
- 22. Tại sao tôi cần gil cho PyMem_Malloc()?
- 23. Tại sao tôi cần sử dụng loại ** để trỏ tới loại *?
- 24. Tại sao chúng ta cần Properties trong C#
- 25. Tại sao chuyển đổi từ một size_t thành int không dấu cho tôi một cảnh báo?
- 26. Có thực hành tốt để sử dụng size_t trong C++ không?
- 27. MongoDB - đối tượng? Tại sao tôi cần _id trong tổng
- 28. Tại sao -L cần thiết khi -rath được sử dụng?
- 29. Sử dụng size_t để xác định độ chính xác của một chuỗi trong printf C
- 30. Tại sao tôi cần "lưu trữ": "có" trong elasticsearch?
Để làm bạn bối rối hơn nữa, có 'ptrdiff_t'. –
@Mayhem Tôi đã đọc câu hỏi này, nhưng vẫn không biết việc sử dụng nó là gì – kevin4z
Để gây nhầm lẫn cho bạn nhiều hơn: có 'size_t' (từ' stddef.h') và 'std :: size_t' (từ' cstddef '). –