2016-05-11 14 views
6

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++?

+2

Để làm bạn bối rối hơn nữa, có 'ptrdiff_t'. –

+0

@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

+0

Để 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 '). –

Trả lời

17

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. :)

+2

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

+3

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 :: size_type' làm loại cho kích thước cho vec-tơ. Nó không * nhất thiết * phải giống như 'std :: size_t'! Mặc dù cho một cuộc sống dễ dàng, chỉ cần sử dụng 'tự động'. – Bathsheba

+0

Haha, tôi có thể nhận được nó! Cảm ơn! :) – kevin4z

4

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).

+0

'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

+4

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

+1

@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

0

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).

Các vấn đề liên quan