Trong C++ 11 std::array
được định nghĩa là có lưu trữ và hiệu suất liền kề không tệ hơn mảng, nhưng tôi không thể quyết định xem các yêu cầu khác nhau của tiêu chuẩn có ngụ ý hay không std :: array có cùng kích thước và bố trí bộ nhớ như một mảng bình thường. Bạn có thể đếm số sizeof(std::array<int,N>) == sizeof(int)*N
hoặc triển khai cụ thể không?Là kích thước của std :: mảng được xác định theo tiêu chuẩn
Đặc biệt, là đảm bảo này để làm việc theo cách bạn mong chờ nó:
std::vector< std::array<int, N> > x(M);
typedef (*ArrayPointer)[N];
ArrayPointer y = (ArrayPointer) &x[0][0];
// use y like normal multidimensional array
Nó hoạt động trong hai trình biên dịch tôi đã cố gắng (GNU & Intel). Hơn nữa, tất cả tài liệu của bên thứ 3 tôi có thể tìm thấy (like this), nói rằng std :: array chỉ là bộ nhớ hiệu quả như một mảng đơn giản, kết hợp với yêu cầu liền kề sẽ ngụ ý rằng nó phải có bố cục bộ nhớ giống nhau. Tuy nhiên tôi không thể tìm thấy yêu cầu này trong tiêu chuẩn.
Không có sự bảo đảm như vậy trong 'mảng mẫu lớp 23.3.2', và thực sự, tìm kiếm tiêu chuẩn cho' sizeof' dường như chỉ bật các đảm bảo sau cho tôi: 'char' và các biến thể của nó là' 1', và 'nullptr' có cùng kích thước với' void * '. – us2012
Như @ US2012 nêu rõ, không có bảo đảm rõ ràng. Mặc dù nó có thể hoạt động trên nền tảng lựa chọn của bạn, nhưng nó có thể thất bại trên các nền tảng khác với các ràng buộc căn chỉnh khác nhau. –