Có, nó liền kề, vì cơ bản là (và thực sự) là type arr[10];
, nhưng với giao diện giống như STL. Nó cũng không phân rã thành con trỏ trên sự khiêu khích nhỏ nhất.
Bạn có thể chuyển an toàn &arr[0]
sang chức năng mong đợi một mảng kiểu C, đó là mục tiêu thiết kế của nó. Để sử dụng nó với các thuật toán STL Tuy nhiên, chỉ cần sử dụng begin
và end
chức năng:
// either members
std::sort(arr.begin(), arr.end());
// or free from <iterator>
std::sort(std::begin(arr), std::end(arr));
Đối với phần luật sư ngôn ngữ, §23.3.2.1 [array.overview] p1
:
Tiêu đề <array>
định nghĩa một lớp mẫu để lưu trữ chuỗi các đối tượng có kích thước cố định. Một mảng hỗ trợ các trình vòng lặp truy cập ngẫu nhiên. Một ví dụ của array<T, N>
cửa hàng N
các yếu tố thuộc loại T
, do đó size() == N
là một bất biến. Các phần tử của array
được lưu trữ liên tục, có nghĩa là nếu a
là array<T, N>
thì nó tuân theo nhận dạng &a[n] == &a[0] + n
cho tất cả 0 <= n < N
.
Và §23.3.2.1 [array.overview] p2
:
Một mảng là một tổng hợp (8.5.1) có thể được khởi tạo với cú pháp
array<T, N> a = {
initializer-list};
Ngoài ra, trong p3
, danh sách các thành viên của std::array
:
T elems[N]; // exposition only
[Lưu ý: Thành viên biến elems
được hiển thị cho triển lãm duy nhất, nhấn mạnh rằng array
là một tập hợp lớp. Tên elems
không phải là một phần của giao diện của array
. —thêm ghi chú]
Bạn đã quên một '&'? – Mehrdad
Vâng, tôi đã làm. Cảm ơn vì đã tìm ra điều đó. – brian