2011-12-14 36 views
18
  • Nơi nào size_t đến từ khi nào tôi không có gì?
  • Có hợp lý để luôn giả sử size_t == std::size_t?
  • Khi nào tôi nên sử dụng size_type trong các hộp chứa std (string::size_type, vector<T>::size_type, v.v ...)?
+0

Âm thanh như trình biên dịch cụ thể –

+0

Bạn có thể giải thích những gì bạn đã quan sát được cho điểm đầu tiên của mình không? Đối với trình biên dịch của bạn, không 'size_t a;' hoạt động như một khai báo ngay cả khi bạn không '# include'd gì cả? Vì nó có vẻ là một câu hỏi về việc triển khai, bạn có thể cho chúng tôi biết bạn đang sử dụng triển khai nào không? –

+0

@DavidThornley Đó là chính xác những gì tôi thấy, tôi đang sử dụng VS2010 – David

Trả lời

10

Trường hợp size_t đến từ đâu khi tôi không có gì trong dự án trống?

Nếu bạn chưa bao gồm bất kỳ thứ gì, bạn không thể sử dụng size_t. Nó được định nghĩa trong <stddef.h> (và có lẽ cũng trong <cstddef>, nếu phiên bản của tiêu đề đó đặt các định nghĩa trong không gian tên chung cũng như std).

Có hợp lý để luôn giả sử size_t == std :: size_t?

Có. Tất cả các loại và chức năng xác định bởi các thư viện C có trong namespace std, miễn là bạn bao gồm thích hợp C++ tiêu đề (ví dụ như <cstddef> hơn <stddef.h>)

Khi nào tôi nên sử dụng std :: _ :: size_type?

Bạn có phải là loại size_type được xác định trong một số lớp và mẫu chuẩn như vector không? Bạn có thể sử dụng chúng khi sử dụng các lớp đó nếu bạn muốn. Trong hầu hết các trường hợp, bạn sẽ biết rằng nó giống như size_t, vì vậy bạn cũng có thể sử dụng và lưu một chút gõ. Nếu bạn đang viết mã chung, nơi bạn không biết lớp là gì, thì tốt hơn nên sử dụng size_type trong trường hợp nó không tương thích với size_t.

Ví dụ: bạn có thể muốn viết vùng chứa được thiết kế để chứa nhiều mục hơn số có thể được đại diện bởi size_t. Bạn có thể sử dụng một số loại số lớn để thể hiện kích thước của vùng chứa, không thể chuyển đổi thành size_t.Trong trường hợp đó, mã như size_t s = c.size() sẽ không biên dịch được - bạn cần sử dụng Container::size_type thay thế.

+0

Trên điểm đầu tiên của bạn, tôi có thể sử dụng size_t khi tôi chưa bao gồm bất cứ điều gì. Để tham khảo - Tôi đang sử dụng VS2010. – David

+0

@Dave: Đó có lẽ là một phần mở rộng của Microsoft cho ngôn ngữ - có rất nhiều trong số chúng. Thử tắt tính năng biên dịch với tiện ích mở rộng ngôn ngữ. –

+0

Bạn đang đúng về những gì tôi có nghĩa là bởi 'std :: ____ :: size_type' nhưng bạn có thể xây dựng trên khi nó có thể là 'không tương thích' với size_t, và sự khác biệt giữa những gì std :: size_t và :: size_type đại diện? – David

1

Nơi nào size_t xuất phát từ khi nào tôi không có gì trong dự án trống?

size_t là loại số nguyên không dấu ký tự được xác định trong thư viện chuẩn của ngôn ngữ C/C++. Nó được xác định trong "stddef.h" cho C và trong <cstddef> cho C++.

Các loại được xác định bởi tệp tiêu đề "stddef.h" được đặt trong không gian tên chung trong khi tiêu đề <cstddef> đặt loại size_t vào không gian tên std.

"stddef.h" từ C được đưa vào C++ để tương thích và do đó loại có thể được tìm thấy trong cả không gian tên chung (::size_t) và không gian tên std (std::size_t).

0

size_t được xác định trong <cstddef> và nằm trong không gian tên std.

+3

Nó sẽ là tốt (ít nhất là cho tôi để tìm hiểu) nếu downvoter giải thích lý do. – Sanish

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