std::size_t n = sizeof(long);
Trên thực tế, bạn đã không hỏi cụ thể những gì dường như là một thói quen xấu int trên. Sử dụng size_t, giấy chứng nhận với không gian tên std, ...
Khi tiêu chuẩn C++ cho biết (18.1), size_t là một loại được xác định trong tiêu đề chuẩn. Tôi khuyên bạn nên bỏ bất kỳ suy nghĩ và ấn tượng nào về khả năng kế thừa từ ngôn ngữ C. C++ là một ngôn ngữ riêng biệt và khác biệt và tốt hơn nên xem xét nó như vậy. Nó có thư viện chuẩn riêng và tất cả các phần tử của Thư viện chuẩn C++ được định nghĩa trong không gian tên std. Tuy nhiên, có thể sử dụng các phần tử của Thư viện chuẩn C trong chương trình C++.
Tôi muốn xem xét việc bao gồm một bản hack bẩn. Tiêu chuẩn C++ cho biết nội dung của các phần đầu là giống nhau hoặc dựa trên các tiêu đề tương ứng từ Thư viện chuẩn C, nhưng trong một số trường hợp, các thay đổi đã được áp dụng. Nói cách khác, nó không phải là một bản sao trực tiếp & dán các tiêu đề C vào tiêu đề C++.
size_t không phải là loại được tích hợp trong C++. Nó là một kiểu được định nghĩa để xác định kiểu kiểu tích phân nào được sử dụng như kiểu trả về của toán tử sizeof(), vì kiểu trả về thực tế của sizeof() được định nghĩa thực hiện, vì vậy tiêu chuẩn C++ hợp nhất bằng cách định nghĩa size_t.
chương trình sau đây (không có bao gồm) dự kiến sẽ biên dịch trên tất cả trình biên dịch C++?
size_t foo()
{
return sizeof(long);
}
CáC++ Chuẩn C nói (1.4):
Các tên được định nghĩa trong thư viện có phạm vi không gian tên (7.3). Một đơn vị dịch C++ (2.1) nhận được quyền truy cập vào các tên này bằng cách bao gồm tiêu đề thư viện chuẩn thích hợp (16.2).
Size_t là tên được xác định trong không gian tên std, vì vậy mọi chương trình sử dụng tên này phải bao gồm tiêu đề tương ứng, trong trường hợp này.
Tiếp theo, chương 3.7.3 nói:
Tuy nhiên, đề cập đến tiêu chuẩn, std :: bad_alloc, và std :: size_t là vô hình thành trừ khi tên đã được tuyên bố bằng cách bao gồm các tiêu đề thích hợp.
Cho rằng, chương trình sử dụng size_t nhưng không bao gồm tiêu đề là không đúng định dạng.
C không có không gian tên. – wnoise
Nó được tích hợp vào C++, khi bạn #include và nằm trong vùng tên không gian. Xem câu trả lời của tôi dưới đây. –
Nó không phải là 'một cách khác để đặt câu hỏi này' - đó là một câu hỏi khác: lợi nhuận chính int. – fizzer