Đối với std::[w]string
, std::[w]string::size_type
bằng std::allocator<T>::size_type
, bằng std::size_t
. Đối với các vùng chứa khác, đó là một số triển khai được định nghĩa kiểu số nguyên không dấu.
Thỉnh thoảng hữu ích khi có loại chính xác, vì vậy, ví dụ: người ta biết loại kết thúc tốt đẹp xung quanh (như, để UINT_MAX
) để người ta có thể tận dụng điều đó. Hoặc đối với các mẫu, nơi bạn thực sự cần phải chuyển hai loại giống hệt nhau cho các mẫu chức năng/lớp.
Thường thì tôi thấy tôi sử dụng size_t
cho ngắn gọn hoặc lặp lại. Trong mã chung, vì bạn thường không biết bạn đang sử dụng mẫu container nào và kích thước của các thùng chứa đó, bạn sẽ phải sử dụng typedef Container::size_type
nếu bạn cần lưu trữ kích thước vùng chứa.
Nguồn
2009-05-28 00:14:14
Bạn có thể làm rõ câu trả lời này không? Tôi đã nhìn lại các tiêu chuẩn dự thảo như xa trở lại như 'N1804' và tôi không thấy bất kỳ mối quan hệ nào giữa' Allocator :: size_type' và 'size_type'. Một cái nhìn nhanh chóng tại libstdC++ không hiển thị bất cứ điều gì tương tự như thế này. –
@ShafikYaghmour, Vì vậy, câu trả lời này hơi lỗi thời, nhưng để tối đa hóa tính di động, tôi nghĩ lời khuyên vẫn là âm thanh: C++ 03 được chỉ định "Bảng 32: size_type: loại có thể đại diện cho kích thước của đối tượng lớn nhất trong mô hình phân bổ. " Vào lúc đó, 'size_t' là việc thực hiện đặt cược thực tế của những ràng buộc đó. Tuy nhiên, trong C++ 11, nó được định nghĩa cơ bản là: 'std :: make_unsigned :: type' theo mặc định. Trong thực tế, có thể sẽ giống hoặc tương thích với 'size_t'. –
CHĂM SÓC câu trả lời là không chính xác .... xem http: // stackoverflow.com/questions/4849678/c-for-loop-size-type-vs-size-t TL: DR: allocators size_type cần phải là size_t và trong C++ 17 size_type sẽ không còn được dùng nữa. – user3063349